私は長い間MySQLを使用してきましたが、一般的なクエリログとスロークエリログは、サーバーで何が起こっているかを調べ、ボトルネックを特定するのに非常に役立つことがわかりました。
次に、SQL Serverを使用する必要があります。 SQL Serverには同様のログ機能がありますか?もしそうなら、彼らは何と呼ばれていますか?
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クエリであり、実行プランやその他の最適化の見方に関するガイダンスです。
SQLプロファイラを使用してシステムをリアルタイムで監視し、実行速度の遅いステートメントを特定できます。
SQLは、追加または制限したいインデックスを提案することもできます: http://msdn.Microsoft.com/en-us/library/ms187974.aspx
SQL Management Studioで、長いクエリに関連するレポートを表示することもできます。サーバー名を右クリックして、[レポート]> [標準レポート]> [パフォーマンス-上位のクエリ...]を選択します。
古い遅いクエリはMSSQLに保存されます。これはすでにここで解決されています:
http://blog.brianhartsock.com/2008/12/16/quick-and-dirty-sql-server-slow-query-log/