マスターデータサービスアプリケーションに関して、速度が低下するという問題が発生しています。そこで、範囲スキャン、シングルトンルックアップ、ページロック待機などの値が最も高いテーブルを調べました。MDSデータベース内の特定のテーブルに対して実行されるクエリの数が最も多いかどうかを確認する方法があるかどうかを教えてください。
特定のテーブルに対して最も実行されているクエリを見つける方法はありますか?
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ステートメントをログに記録していることがわかります。これは、関心のあるテーブルに影響を与えているストアドプロシージャを見つけることもできるので便利です。
このクエリの欠点は、各クエリを実行しているユーザーアカウントが表示されないことです。