1

使用したクエリ:

(オンラインのどこかからキャッシュクリーンアップコードをコピーしていました)

CHECKPOINT; 
GO 
DBCC DROPCLEANBUFFERS; 
GO
DBCC DROPCLEANBUFFERS
GO

SET STATISTICS TIME ON;
SET STATISTICS IO ON;

select a.a,a.b from t1 a JOIN t1 b on a.i=b.i

t1のスキーマは

CREATE TABLE [dbo].[t1](
    [i] [int] NULL,
    [a] [varchar](1000) NULL,
    [b] [varchar](1000) NULL,
    [c] [varchar](1000) NULL
) ON [PRIMARY]

また、t1にはランダムデータが入力されます(I0〜11の範囲で、a、b、cにはNEWID()値が入力されます)

約900行(正確には934行)が含まれています

クエリを実行した結果は次のとおりです。

SQL Serverの解析およびコンパイル時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。

SQL Serverの実行時間:CPU時間= 0ミリ秒、経過時間=55ミリ秒。SQL Serverの解析およびコンパイル時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。DBCCの実行が完了しました。DBCCがエラーメッセージを出力した場合は、システム管理者に連絡してください。

SQL Serverの実行時間:CPU時間= 0ミリ秒、経過時間=4ミリ秒。SQL Serverの解析およびコンパイル時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。DBCCの実行が完了しました。DBCCがエラーメッセージを出力した場合は、システム管理者に連絡してください。

SQL Serverの実行時間:CPU時間= 0ミリ秒、経過時間=1ミリ秒。SQL Serverの解析およびコンパイル時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。

SQL Serverの実行時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。

SQL Serverの実行時間:CPU時間= 0ミリ秒、経過時間=0ミリ秒。

(影響を受ける115974行)テーブル'Worktable'。スキャンカウント0、論理読み取り0、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表't1'。スキャンカウント2、論理読み取り32、物理読み取り0、先読み読み取り20、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。

SQL Serverの実行時間:CPU時間= 79ミリ秒、経過時間=15858ミリ秒。

私が理解しているように、クリーンなキャッシュはかなりの数の物理的な読み取りをもたらすはずですよね?

(Win8ホスト上のHyperVで実行されているWin8ゲストVMで実行されているSQLServer 2012)

4

1 に答える 1

2

強調表示したアイテムは、クエリの過程でWorktable作成された(スプールなど)用です。tempdbディスクから読み込む必要のある既存のテーブルではありません。

の行にt1は、いくつかの物理的な読み取りや先読みの読み取りが表示されます。

(編集:それが最初に含まれていたのを見ませんでした)。以下は、からの20の先読み読み取りを示していますt1

Table 't1'. Scan count 2, logical reads 32, physical reads 0, read-ahead reads 20

これは、すべてのページが先読みメカニズムによってキャッシュに入れられたことを意味します。

于 2012-11-09T11:45:51.957 に答える