web-dev-qa-db-ja.com

特定のテーブルに対して最も実行されているクエリを見つける方法はありますか?

マスターデータサービスアプリケーションに関して、速度が低下するという問題が発生しています。そこで、範囲スキャン、シングルトンルックアップ、ページロック待機などの値が最も高いテーブルを調べました。MDSデータベース内の特定のテーブルに対して実行されるクエリの数が最も多いかどうかを確認する方法があるかどうかを教えてください。

4
sqlsurfer7

特定のテーブルに対して最も実行されているクエリを見つける方法はありますか?

T-SQL –テーブルにヒットしたSQLステートメントの履歴レコードを取得します

このクエリは、sys.dm_exec_query_statsシステムビューとsys.dm_exec_sql_texをチェックします。 tテーブル値関数。

また、これらはシステムテーブルであるため、十分なアクセス許可を持つアカウントでSQL Server Management Studio(SSMS)にログインする必要があります。

クエリは次のとおりです。

 SELECT
 qryStats.last_execution_time AS [Time]
 ,qryText.TEXT AS [Query]
 ,DB_NAME(qryText.[dbid]) AS [Database]
 ,OBJECT_NAME(qryText.[objectid]) AS [TableName]
 FROM sys.dm_exec_query_stats AS qryStats
 CROSS APPLY sys.dm_exec_sql_text(qryStats.sql_handle) AS qryText
 WHERE qryText.TEXT LIKE '%TableName%'
 ORDER BY qryStats.last_execution_time DESC

このクエリを実行すると、データベースサーバー上の特定のテーブルに対して実行されたSQLが時系列の逆順で表示されます。

ストアドプロシージャを使用している場合は、EXECステートメントを表示するのではなく、SQLServerがストアドプロシージャ自体のCREATEステートメントをログに記録していることがわかります。これは、関心のあるテーブルに影響を与えているストアドプロシージャを見つけることもできるので便利です

このクエリの欠点は、各クエリを実行しているユーザーアカウントが表示されないことです。

ソース

1
Pimp Juice IT