SQL Server プロパティのメモリ設定を低メモリに変更しました。また、バッファ一時パスをシステムの特定の場所に変更しました。しかし、パッケージがメモリ不足のメッセージで失敗するのはなぜですか? blob temp、データはその一時的な場所にスワップする必要がありますか?次に、失敗している場合、バッファ一時の使用は何ですか?
1 に答える
SSIS 2005 のBufferTempStoragePathの既定のファイル パスの場所は何ですか? 特に、SQL エージェント サービス アカウントからのディスク上のこれらの場所へのアクセス可能性に関する bimonkey のリンクされた記事をお読みください。
一般的に、パッケージがメモリ不足を報告している場合、それは完全にブロックされた変換の使用によるものですルックアップ タスクが引き戻すデータが多すぎます。パッケージがブロッキング変換を頻繁に使用する場合は、作業をソース システムにオフロードしてみてください。ルックアップが原因である場合は、クエリをより選択的にしてみてください。テーブル全体をプルバックするのではなく、必要な列のみをプルします。それが十分に選択的でない場合は、そのデータセットを where 句でフィルタリングしてみてください (今年のデータのみが必要など)。それができない場合は、ルックアップをフル キャッシュ モードから部分キャッシュ モードまたはキャッシュなしに切り替えます。キャッシュがない場合、通過する行ごとにソース システムへの 1 回限りのクエリが発生することはありません。2 行前にまったく同じクエリを実行したという記憶はありません。部分キャッシュは、X MB のデータをメモリに保持することで、このジレンマを解決します。メモリ使用量を減らす方法の詳細が必要な場合は、パッケージがどのように見えるかのスクリーンショットを投稿してください。また、
データフローのアーキテクチャは、データがメモリ バッファに読み込まれ、それらのバッファのアドレスがさまざまなタスクに渡されるようなものです。各タスクは、通過するデータを保持するために割り当てられた大量のメモリを必要とするのではなく、すべて同じ共有メモリ セットで動作します。そのメモリをタスクからタスクにコピーすると、メモリ消費の点で時間がかかり、非常に高価になります。
その序文で、BufferTempStoragePath と BlobTempStoragePath とは何ですか? 大きなオブジェクト型 (n/varchar(max)、xml、image など) をデータフローにプルするときはいつでも、そのデータはネイティブ型のようにメモリ バッファーに保持されません。代わりに、ディスクに書き込まれ、そのアドレスへのポインターがメモリ バッファーに入れられます。BufferTempStoragePath は、データ フロー タスクにまだ作業が残っているが、次のいずれかを行った場合に使用されます。
- (変換を完全に/部分的にブロックすることにより) メモリを断片化しすぎて、エンジンがそれ以上取得できなくなりました
- 1 つのタスクで非常に多くのことを実行しようとしています。私の経験則では、パッケージ内の任意の変換からすべてのソースと宛先までの行をたどることができるはずです。インポート/エクスポート ウィザードからパッケージを作成した場合、これらのデータフローは、関連のないものを単一のデータ フローにグループ化してメモリを消費することを好むため、個別のフローに分割する最有力候補です。
- ボックスには、データに対して実行するのに十分なリソースがありません。私は通常、仕事にこれ以上ハードウェアを投入することは避けたいと思っていますが、最初の 2 つの弾丸に対処した場合、これが私のピストルの最後の弾丸になります。