- ベストアンサー
SSISにて、一時テーブルを使ったファイルの取り込みがうまく行かない場合がある
- SQL Server 2005のSSISを使用して、並列で一時テーブルを作成し、フラットファイルデータを取り込む処理において、成功と失敗が混在しています。
- 一時テーブル作成処理は成功しているが、次の処理に移る前にエラーが発生しています。
- 直列で処理を行うとエラーは発生せず、問題なく処理が完了します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SSISは並列処理が1つの売りだったりするわけですが、接続マネージャのRetainSameConnectionは「そのセッションをパッケージ完了まで維持する」ことは意味していますが、「そのセッションで全ての処理を行う」ことまでは意味していないということです。 今回のような並列処理で、SSISが並列実行可能と判断すれば、その部分については複数のセッションで接続し、並列実行を行おうとします。 (追加で立ちあがったセッションは並列実行が終われば切れてしまいます) 質問者さんのケースでエラーになる場合、例えば##T2がエラーになったとすれば、 1)最初に立ちあがったセッションが##T1, ##T3を作成 2)その間にもう一つのセッションが立ちあがり、##T2を作成(並列実行)し、そのセッションは切れる 3)最初に立ちあがったセッションが##T1, ##T2, ##T3へのインポート処理を行う ということが起こっているはずです。 (一番いいのはSQL Serverプロファイラで実行中の内容を確認してみることです) この問題を回避する案としては、 1) Packageのプロパティにある「MaxConcurrentExecutables」の値を-1から1に変更します(-1はCPU+2を意味する既定値)。ここを1にすると、並列処理であるものの並列実行はプランされないため、途中で余計なセッションが立ちあがることはなくなりますが、逆にいうとこのステップに関して並列にタスクを組むこと自体にうまみがなくなるということです。 2) 接続マネージャを3本作ってそれぞれに割り当てる。 それぞれが最初から違うセッションで実行されますので、並列実行でも勝手にセッションが立ちあがることはないはずです。 ただ、本当にここまでやる必要があるのかどうかという点だけですね。
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
一時テーブル作成を直列にするのであれば、確かに問題はないと思います。
お礼
ご回答ありがとうございます! 助かりました!
補足
jamshid6さま いつもご回答ありがとうございます。 なるほど、別のセッションが立ち上がり、 それが切れることで一時テーブルも無くなってしまった、 という事だったのですね、、 頂いたアドバイスを元に、並列処理のうまみを生かしつつ、 接続マネージャを1本でなんとかしようと考え、以下の手法で やってみたところ、うまくいきました! ##t1作成 ↓ ##t2作成 ↓ ##t3作成 ↓ ↓ ↓ ##t1取込、##t2取込、##t3取込(ここを並列に) この方法なら問題ないですよね??