1
dbcc FREEPROCCACHE
dbcc DROPCLEANBUFFERS

set STATISTICS IO ON--Case 1
SELECT * from Production.Suppliers s


--(30 row(s) affected)
--Table 'Suppliers'. Scan count 1, logical reads 3, physical reads 1, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

--again without clearing the cache I ran above

set STATISTICS IO ON
SELECT * from Production.Suppliers s


--(30 row(s) affected)
--Table 'Suppliers'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

ケース1でキャッシュをクリアすると、論理読み取り3がどのように表示されるかわかりません。読み取りが論理読み取りであるということは、いいえを意味します。データ キャッシュから読み取られたページの数ですが、SQL ステートメントを実行する前に CASE 1 でクリアしています

なぜ?

4

2 に答える 2

-1

論理読み取りは、クエリが開始される前にページがキャッシュにあったことを意味するものではありません。SQL Server がアクセスする必要があるすべてのページは、論理読み取りとしてカウントされます。ページに 2 回アクセスする必要がある場合は、2 つの論理読み取りがカウントされます。ページにアクセスする必要があるたびに、SQL Server はコードを実行して、読み取り中にそのページが変更されないようにする必要があります (そのためにラッチを使用しています)。したがって、論理読み取りはかなりコストのかかる操作です。したがって、論理読み取りの数は、クエリのコストを示す良い指標です。

于 2013-04-24T14:39:31.817 に答える