SQL Server 2008のストレステストを行い、一時テーブルと変数を使用しているため、tempdbへのデータフローを知りたいです。
統計はActivityMonitorにも表示されます。
どういうわけかデータを記録し、後でそれを分析することは可能ですか?私は2つのケースを念頭に置いています:
- SQL Serverカウンターを記録します(名前はわかりません)
- アクティビティモニターから何とかデータを記録する
SQL Server 2008のストレステストを行い、一時テーブルと変数を使用しているため、tempdbへのデータフローを知りたいです。
統計はActivityMonitorにも表示されます。
どういうわけかデータを記録し、後でそれを分析することは可能ですか?私は2つのケースを念頭に置いています:
データベースへの書き込みは、ディスク IO と 1 対 1 ではありません。データベースは、後でレイジー ライターまたはチェックポイントでディスクにコピーされるダーティ インメモリ ページのみを更新します。ディスクに書き込まれるのは、Write Ahead Log アクティビティのみであり、これには特定のデータベースごとのカウンター ( Log Bytes Flushed/sec ) があります。回復されないため、特別なログ要件があることに注意しtempdb
てください。必要なのは元に戻す情報のみです。ダーティ ページが実際にフラッシュされるときはいつでも、それがチェックポイントまたはレイジー ライターによってフラッシュされるときはいつでも、そのための特定のカウンターもあります: Checkpoint pages/secおよびLazy writes/sec。これらのアクティビティ自体は「データベースごと」ではないため、これらはデータベースごとではありません。最後に、仮想ファイル統計 DMV があります。sys.dm_io_virtual_file_stats
これは、tempdb を含む個々のデータベースの個々のファイルごとに、IO 操作の合計数とバイト数を提供します。
一時テーブルとテーブル変数の特定の影響を測定したいが、それらを残りの tempdb アクティビティ (並べ替えスプール、作業テーブルなど) から分離することはできません。SQL 2008 にも適用されるため、SQL Server 2005 での tempdb の使用について確認することをお勧めします。
パフォーマンス モニター (perfmon.exe) を使用して SQL Server カウンターを監視する場合、.csv ファイルにログを記録して Excel で分析するように構成できます (たとえば)。
問題のパフォーマンス カウンターは、SQLServer:Databases の下の Data File(s) Size です。
テーブルにロードされた一定間隔の「スナップショット」(次の DMV を使用) をいくつか取得して、tempDB の内部使用状況を判断します。
sys.all_objects
sys.dm_db_file_space_usage
sys.dm_db_task_space_usage
sys.dm_db_task_space_usage は、使用状況を SPID などで分類します。