25

簡単な質問ですが、Google で適切な説明が見つかりませんでした。Set Statistics IO ON を使用すると、管理スタジオのメッセージ ウィンドウに論理読み取りとスキャン カウントが表示されます。私が持っている場合:

tbl例、スキャン数 5、論理読み取り 20

スキャン数とは何を意味しますか?

4

5 に答える 5

23

「テーブルスキャン」が何を意味するかについては、私が見つけることができる最高のものは次のとおりです。

スキャン回数とは、クエリ中にテーブルまたはインデックスがアクセスされた回数を意味します。これは、フル スキャン、部分スキャン、または単にシークの場合があります。

つまり、スキャン カウントだけでは、先に進むには十分な情報ではありません。これらのスキャンが何であったかを正確に知る必要があるため、詳細については実際の実行計画を確認する必要があります。結論として、それ自体はあまり有用な指標ではありません!

さらに:

http://www.eggheadcafe.com/software/aspnet/32171165/set-statistics-io-scan-count-explanation.aspx

残念ながら、最近のスキャン カウントはあまり有益ではありません。ええと、19223 のような数値が表示された場合、テーブルはおそらくネストされたループ結合を介して何度もアクセスされています。

「スキャン回数」が単に「テーブルにアクセスした回数」を意味していた時期がありましたが、それはかなり前のことで、おそらく SQL 6.5 でのことです。0 の定義でスキャン カウントを取得できるのは、次のようなクエリを使用した場合だけです。

select *
from TestA1
where CompanyID = 1
and CompanyID = 2

... SQL Server は、テーブルにアクセスせずに、クエリが行を返さないと結論付けることができます。

于 2010-08-06T02:31:22.970 に答える
18

ブックスオンラインから

スキャン数: 実行されたインデックスまたはテーブル スキャンの数。

論理読み取り: データ キャッシュから読み取られたページの数。

物理読み取り: ディスクから読み取られたページ数。

先読み読み取り: クエリのキャッシュに配置されたページの数。

ここも参照してください: http://technet.microsoft.com/en-us/library/ms184361.aspx

于 2009-01-14T19:40:27.940 に答える
16

msdn の引用を引き続き収集する場合。[1] は [2] で繰り返されます。

  • " Logical Reads
    この値は、クエリを処理するために必要なページ アクセスの総数を示します。すべてのページは、特定の読み取りのためにディスクからキャッシュにページを移動する必要があったかどうかにかかわらず、データ キャッシュから読み取られます。この値は次のとおりです。常に少なくとも同じ大きさで、通常は物理読み取りの値よりも大きくなります (クエリがインデックスから駆動される場合など) 同じページが何度も読み取られる可能性があるため、テーブルの論理読み取りのカウントは、表のページ数。

  • Physical Reads
    この値は、ディスクから読み取られたページ数を示します。常に Logical Reads の値以下です。パフォーマンス モニターで表示されるバッファー キャッシュ ヒット率の値は、論理読み取りと物理読み取りの値から次のように計算されます。

  • Read Ahead Reads
    Read Ahead Reads 値は、クエリの処理中に先読みメカニズムを使用してキャッシュに読み込まれたページの数を示します。これらのページは、必ずしもクエリで使用されるとは限りません。ページが最終的に必要な場合、論理読み取りはカウントされますが、物理読み取りはカウントされません。高い値は、物理読み取りの値がおそらくより低く、キャッシュ ヒット率がおそらくより高いことを意味します... [vgv8 によって切り詰められました]

  • スキャン数
    Scan Count 値は、対応するテーブルがアクセスされた回数を示します。ネストされたループ結合の外部テーブルのスキャン カウントは 1 です。内部テーブルの場合、スキャン カウントは、テーブルがアクセスされた「ループを介した」回数である可能性があります。論理読み取りの数は、スキャン カウントに各スキャンでアクセスされるページ数を掛けた合計によって決まります。ただし、ネストされたループ結合の場合でも、内部テーブルのスキャン カウントが 1 と表示される場合があります。SQL Server は、必要な行を内部テーブルからキャッシュ内の作業テーブルにコピーし、この作業テーブルを使用して実際のデータ行にアクセスする場合があります。このステップが計画で使用されている場合、多くの場合、STATISTICS IO 出力にそれが示されません。STATISTIC TIME からの出力と、使用された実際の処理計画に関する情報を使用する必要があります。クエリの実行に関連する実際の作業を決定します。通常、ハッシュ結合とマージ結合では、結合に関係する両方のテーブルのスキャン カウントが 1 として表示されますが、これらのタイプの結合では、かなり多くのメモリが必要になる可能性があります。クエリの実行中に sysprocesses の memusage 値を調べることができますが、physical_io 値とは異なり、これは累積カウンターではなく、現在実行中のクエリに対してのみ有効です。クエリが完了すると、使用されたメモリの量を確認する方法がありません。」これは累積カウンターではなく、現在実行中のクエリに対してのみ有効です。クエリが完了すると、使用されたメモリの量を確認する方法がありません。」これは累積カウンターではなく、現在実行中のクエリに対してのみ有効です。クエリが完了すると、使用されたメモリの量を確認する方法がありません。」

[1]
第 4 章。クエリ パフォーマンスのトラブルシューティング。
Microsoft® SQL Server™ 2005内部のクエリ パフォーマンスの監視:
Kalen Delaney による クエリのチューニングと最適化


発行元: Microsoft Press
Pub 日付: 2007 年 9 月 26 日
印刷版 ISBN-10: 0-7356-2196-9
印刷版 ISBN-13: 978-0-7356-2196-1
ページ数: 448

[2]クエリ パフォーマンスの
監視 クエリ パフォーマンスの
最適化
Ron Soukup、Kalen Delaney
著 Microsoft Press 発行の Inside Microsoft SQL Server 7.0 の第 14 章
http://technet.microsoft.com/en-us/library/cc917719.aspx#ECAA

于 2010-11-09T16:34:01.670 に答える
9

これについての非常に包括的な要約がここにあります。

于 2010-11-20T19:35:19.513 に答える
0

スキャン数は無視してください。重要ではありません。論理読み取りを下げる方法に注目してください。http://www.practicalsqldba.com/2013/07/sql-server-performance-tuning.htmlに基づきます。

于 2014-03-07T04:38:51.230 に答える