2011-07-17 8 views
1

テーブル定義がSQL Serverの行挿入速度にどのように影響するかをベンチマークしたい場合は、トランザクションをBEGINからCOMMITに渡すだけでは不十分だと思います。これは、INSERTを(順次)ログに追加する時間を測定します。右?INSERTをベンチマークする最良の方法 - すべてを含む?

実際のINSERTが実際のテーブル(INSERTの後で少し再構成されるかもしれないクラスタ化されたインデックス)に実際に適用されるとき、実際のI/Oヒットが発生します。使用された時間の合計はどのように測定できますか?つまり、(ログに書き込まれる)すべてのINSERTの時間+「実際の」データ構造を更新するために使用される時間?タイマーを停止する前に "CHECKPOINT"を実行すれば十分ですか?あなたが一度にバッファプールで汚れている正確にどのように多くのページを見つけることができます下のクエリを使用して :

答えて

1

回答が不十分なため、私はこれに自分自身で答えるでしょう。

さまざまなドキュメントで見る限り、CHECKPOINTを発行してクエリによって誘導されるall related disk activityに届きます。これにより、すべてのダーティページが強制的にディスクに書き込まれます。

測定対象のクエリ以外のものが実行された場合、唯一のダーティページはクエリによって触れられたものになります。実行された実験は、この「理論」を支持するようである。

+0

+1よく知っています。 –

+0

しかし、これは人為的に低い数値なので、ファラルシーです。長時間の挿入/更新が頻繁に行われない限り、チェックポイントは通常データベースをあまり遅くしません。あなたのテストよりもはるかに少ない。 – TomTom

0

SET STATISTICS TIME ONは、あなたがそれ

編集を設定した後に実行するステートメントごとにあなたがMS内で実行し、CPU時間を与えます実行サイズとサイズ(MB)、およびサーバーと合計の最大/最小メモリーの構成。

SELECT 
ISNULL((CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END),'Total Pages') AS [Database Name], 
SUM(CASE WHEN ([is_modified] = 1) THEN 1 ELSE 0 END) AS [Dirty Page Count], 
SUM(CASE WHEN ([is_modified] = 1) THEN 0 ELSE 1 END) AS [Clean Page Count], 
COUNT(*) * 8.0/1024.0 [Size in MB], a.value_in_use [Min Server Memory], 
b.value_in_use [Max Server Memory] 
FROM sys.dm_os_buffer_descriptors 
INNER JOIN sys.configurations a on a.configuration_id = 1543 
INNER JOIN sys.configurations b on b.configuration_id = 1544 
GROUP BY [database_id],a.value_in_use,b.value_in_use WITH CUBE 
HAVING A.value_in_use IS NOT NULL AND B.value_in_use IS NOT NULL 
ORDER BY 1; 
+0

これでは不十分です。すべての実行時間が必要です。つまり、後でディスクにダーティなバッファページを書き込むことが含まれます。 – someName

+0

ディスクへのダーティ・ページの書き込みは、問合せを実行した後ではなく、いつでも実行できます。チェックポイントのプロファイリングを本当にしたい場合は、挿入の直後に 'CHECKPOINT'を発行し、STATISTICS TIMEも時間を与えます。 時間を自分で追加したくない場合は、これをプロファイラで捕捉し、バッチ完了イベントをプロファイリングすることができますが、依然としてCHECKPOINTを自分で発行する必要があります。 –

関連する問題