web-dev-qa-db-ja.com

MSSQL ServerにはMySQLのクエリログに相当するものがありますか?

私は長い間MySQLを使用してきましたが、一般的なクエリログとスロークエリログは、サーバーで何が起こっているかを調べ、ボトルネックを特定するのに非常に役立つことがわかりました。

次に、SQL Serverを使用する必要があります。 SQL Serverには同様のログ機能がありますか?もしそうなら、彼らは何と呼ばれていますか?

7
Martin

SQLサーバーは、すべてのクエリに関する統計情報をさまざまなテーブルに保持します。次のコードを使用して、(sys.dm_exec_query_statsテーブルから)実行時間が最も長いクエリを判別できます。

次のDBCCコマンドを実行する必要があります。

次のDBCCコマンドは、サーバーキャッシュをクリアし、クエリ実行時間のログ記録を再開します。

DBCC FREEPROCCACHE

次のクエリを実行して、最も長く実行されているクエリを見つけます。

SELECT DISTINCT TOP 10
 t.TEXT QueryName,
 s.execution_count AS ExecutionCount,
 s.max_elapsed_time AS MaxElapsedTime,
 ISNULL(s.total_elapsed_time / s.execution_count, 0) AS AvgElapsedTime,
 s.creation_time AS LogCreatedOn,
 ISNULL(s.execution_count / DATEDIFF(s, s.creation_time, GETDATE()), 0) AS FrequencyPerSec
 FROM sys.dm_exec_query_stats s
 CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t
 ORDER BY
 s.max_elapsed_time DESC
 GO 

また、Technetのマガジン記事 SQL Serverクエリのパフォーマンスの最適化 も確認する必要があります。最も高価な読み取りI/Oクエリであり、実行プランやその他の最適化の見方に関するガイダンスです。

4
Jim B

SQLプロファイラを使用してシステムをリアルタイムで監視し、実行速度の遅いステートメントを特定できます。

3
mrdenny

SQLは、追加または制限したいインデックスを提案することもできます: http://msdn.Microsoft.com/en-us/library/ms187974.aspx

SQL Management Studioで、長いクエリに関連するレポートを表示することもできます。サーバー名を右クリックして、[レポート]> [標準レポート]> [パフォーマンス-上位のクエリ...]を選択します。

1
Sam

古い遅いクエリはMSSQLに保存されます。これはすでにここで解決されています:

http://blog.brianhartsock.com/2008/12/16/quick-and-dirty-sql-server-slow-query-log/

0
VDewar