SET STATISTICS IO-ワークテーブル/ワークファイル


21

私はクエリを実行しています、それは計画を生成します: ここに画像の説明を入力してください

統計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つのテーブルを意味しますか?

複数のワークファイル/ワークテーブルがある場合、それがどの操作に使用されているかわかりませんか?


ハッシュ一致の警告は何ですか?それはtempdbの流出ですか?
トムV-チームモニカ

@TomV、YES-スピルレベル1およびレベル2流出
ジャニス

回答:


15

1.統計IOがプロファイラーよりも高い読み取りを示すのはなぜですか?

わかりません、すみません。知識ベースの記事で暗示されているように、それらは異なるものを測定しているため、しばしば違いがあります。これに関する追加のドキュメントはありません。詳細なテストを通じていくつかのことを推測できる可能性がありますが、実際にバージョンやビルド全体で一貫性が保たれるという保証はありません。想定される動作は、考えられるバグを説明する前に十分に矛盾しています。

2.「ワークテーブル」と「ワークファイル」の違いは何ですか

どちらも内部オブジェクトです。それ以外の場合は、名前が示すとおりです。作業テーブルはテーブルのような構造を持ち、作業ファイルはファイルのようなものです。詳細な構造は表示されませんが、いくつかの広範な機能は、メソッドを検査し、デバッガーで実行パスを追跡することで識別できます。

3.この特定のケースに「ワークテーブル」があるのはなぜですか?

(行モード)ハッシュ操作には、常に作業テーブルが必要です。入力をハッシュパーティション(テーブルパーティションに関連しない過負荷の用語)に配布し、ステータスを追跡するために内部的に使用されます。ハッシュ出力テーブルが統計出力でゼロ以外を報告するのを見たことはありませんが、実際に調べたことはありません。

4. Workfileの「物理読み取り」とはどういう意味ですか?

ワークファイルは、ハッシュパーティションが流出したときに使用されるメカニズムの一部です。文書化されていませんが、実行エンジンがワークファイルからこぼれたハッシュパーティションを取得すると、物理読み取りおよび先読み読み取りが発生します。

5. 1つの「ワークファイル」とは、1つの目的で使用される正確に1つのテーブルを意味しますか?

私が思い出すように、複数のインスタンスがあるかもしれません。特定のSTATISTICS IO行を特定のオブジェクトまたはプランノードに関連付ける方法はありません。これは長年の制限です。SQL Server 2016では、これに変更が加えられる可能性がありますが、内部の一時オブジェクトに適用されるかどうかを確認するテストは行っていません。

最終的には、実行後計画の他の情報(またはDMV、拡張イベントなど)を参照することで学習できる範囲を超えて、作業ファイルおよび作業テーブルの出力から学習することはそれほど有用ではありませんSTATISTICS IO。不完全な答えをおpoび申し上げますが、頭の外から申し出ることができる最高の方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.