SELECT INTO
ステートメントを最小限に抑え、ログトラフィックの発生が少ないため、処理速度が速いストアドプロシージャを使用するETLプロセスがあります。ストアドプロシージャに格納された一連の作業の中で、最も高価な操作のいくつかは、単にクエリ結果をバッファして作成したテーブルにコピーするように見える熱心なスプールです。SQL Serverで熱心なスプール操作を回避する方法
eager spoolsに記載されているMSDNのドキュメントは非常にまばらです。誰にも、これらが本当に必要かどうか(そしてどのような状況下で)、より深い見識がありますか?私はいくつかの理論を持っているかもしれませんし、意味がないかもしれませんが、質問からこれらを除外することに成功しません。
.sqlplanファイルはかなり大きいので(160kb)、フォーラムに直接投稿するのはおそらく妥当ではないと思います。
- クエリは、このようなフォーマットされた日付を解析として、データ変換のためのいくつかのUDFを使用しています。
だから、ここの特定の回答を受けやすいかもしれいくつかの説があります。このデータ変換では、感覚的な型(例:varcharの長さ)を構築する前にテーブルに割り当てるために熱心なスプールを使用する必要がありますか?
- 上記の質問の延長として、クエリでこの操作を駆動するかどうかを誰かがより深く理解できますか?
読み取り分離は、ソースからコピーされたステージング領域からのプロセスクエリとしても適用できます。さらに、これは私の特定の問題を解決しない場合でも、私は熱心なスプール操作で見つけることができるMSDNの文献に言及していないので、少しの洞察力を追加します。 – ConcernedOfTunbridgeWells
何か助けてくれてうれしいです。問題のSQLコードを投稿した場合は、さらに手助けすることができます(必要に応じて汎用化されています) – Grank
熱心なスプールも遅延スプールよりも劣ります。あなたのeagerを怠け者に変えるためのヒントはありませんが、一度に少量のデータで作業し、それをパイプラインに通すというコンセプトは、別の方法を提案しています。一度に1000または10000行の一度にクラスター化されたインデックスを1つのチャンクにすばやく進めることができる、優れた「ウォーキング」スキームを考え出すのはかなり手間がかかりますが、結果は驚異的なものになります... – ErikE