統計IO:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
だから、いくつかの質問
1.統計IOがプロファイラーよりも高い読み取りを示すのはなぜですか?。
とおりKB314648プロファイラは、統計IOよりも高い数値が報告された場合ならば、それはOKです。しかし、プロファイラーは92283
、記述されたクエリ、同じ実行で読み取りを表示し ます。それは、プロファイラーがワークファイル/ワークテーブルの読み取りをカウントしないことを意味しますか?
2.「ワークテーブル」と「ワークファイル」の違いは何ですか
私はそれを見つけました:
- ワークファイルを使用して、ハッシュ結合とハッシュ集計の一時的な結果を保存できます。
- 作業テーブルを使用して、クエリスプール、LOB変数、XML変数、およびカーソルの一時的な結果を格納できます。
それらの間に物理的な違いはありますか?
3.この特定のケースに「ワークテーブル」があるのはなぜですか?
論理読み取りが0である場合、なぜ作業テーブルがあるのですか?統計IOに含まれているのは、それが必要な可能性があるからです(推定値が悪い場合)?
technetで見つかった説明はあいまいなようです。
4. Workfileの「物理読み取り」とはどういう意味ですか?
これは、クエリに十分なメモリが与えられていないため、クエリの実行中にデータをディスクに書き込む必要があったことを意味しますか(ハッシュ一致で黄色の警告)?Statistics IOで物理読み取りのワークテーブル/ワークファイルが表示されるたびに、クエリに十分なメモリが付与されておらず、クエリの中間結果がtempdbディスクに書き込まれる必要があると想定できますか?論理的な読み取りのみが表示される場合は常に、RAMが使用されますか?
5. 1つの「ワークファイル」とは、1つの目的で使用される正確に1つのテーブルを意味しますか?
複数のワークファイル/ワークテーブルがある場合、それがどの操作に使用されているかわかりませんか?