2011-09-12 43 views
5

私は1データベースに統合する必要があるcca 25データベースを持っています。まず、私は1つの場所に各テーブルからすべてのデータをコピーしますSSISパッケージを構築しようとしたが、その後、私はエラーを得た:SSIS - メモリ不足エラー

Information: The buffer manager failed a memory allocation call for 10485760 bytes, but was unable to swap out any buffers to relieve memory pressure. 1892 buffers were considered and 1892 were locked. Either not enough memory is available to the pipeline because not enough are installed, other processes were using it, or too many buffers are locked.

そこで私は、これは良いアイデアではないと気づい私は新しいレコードを挿入する必要があり、既存のものを更新する。その後、私はこのオプションを試しました:

  • すべてのconnのリストを取得します。文字列
  • のforeachデシベル、新しいレコードをコピーし、既存のものを更新する(一時テーブルにソースからコピーを更新する必要があるもの、目的地からそれらを削除して、送信先テーブルに一時からコピーすること)

enter image description here

データは万行以上proccesesを流しいくつかのケースでは

enter image description here

のようなデータフロータスクがどのように見えるか

がここにあります。しかし、私はまだ同じエラーが発生 - メモリが不足しています。タスクマネージャで

状況は以下の通りです:

enter image description here enter image description here

私はこの同じサーバに複製されている28個のデータベースがあることに注意しなければならないと、このパッケージには、SQL Serverを実行していないときに、まだ使用しています1GB以上のメモリ私はそれが通常だと読んだが、私は、私はこの記事で見つけたSQL Server用の修正プログラムをインストールした

今私が...それはよく分からない:http://support.microsoft.com/kb/977190 をしかし、それは解決しない... 私は何か間違っているのですか?これはちょうどものがうまくいく方法です、私は回避策の解決策を見つけると思いますか?

おかげで、あなたの参照変換が完全キャッシュに設定されている場合は、メモリの問題に遭遇するかもしれません

+0

あなたは何をブラックアウトしましたか?秘密のプロセス? –

答えて

1

私は解決策を発見し、問題は、SQL Serverにあった - それはメモリのあまりを消費しました。デフォルトでは、最大サーバーメモリは2147483647に設定されていました(これがデフォルト値です)。私のサーバは4GBのRAMを持っているので、私はこの数を1100MBに制限しました。それ以来、記憶上の問題はありませんでしたが、私の流れの仕事は非常に遅かったです。問題はLookupを使用していることでした。デフォルトでは、ルックアップはルックアップテーブルからすべてを選択します。これを変更し、ルックアップに必要な列のみを選択しました。

ここで、統合の全プロセスは約1時間15分かかります。

3


イル。私が見たことから、マージ結合は、行数が1000万を超える場合、ルックアップ変換よりも優れています。

ここで、マージ結合とルックアップ変換の違いについて説明しました。

What are the differences between Merge Join and Lookup transformations in SSIS?

+0

マージ・ジョインを使って行を更新する方法がわかりません...私もその方法を試してみましたが、私は更新のための部分を欠いています... ありがとう! –