sql2k8のアクティビティモニターを使用すると、最もコストのかかるクエリを確認できます。わかりました、それは素晴らしいですが、この情報をログに記録したり、クエリアナライザーを介してこの情報を取得したりする方法はありますか?SQL Managementコンソールを開いて、アクティビティモニターダッシュボードを見たくありません。
どのクエリが適切に記述されていないか、スキーマが適切に設計されていないかなどを把握したい。
助けてくれてありがとう!
sql2k8のアクティビティモニターを使用すると、最もコストのかかるクエリを確認できます。わかりました、それは素晴らしいですが、この情報をログに記録したり、クエリアナライザーを介してこの情報を取得したりする方法はありますか?SQL Managementコンソールを開いて、アクティビティモニターダッシュボードを見たくありません。
どのクエリが適切に記述されていないか、スキーマが適切に設計されていないかなどを把握したい。
助けてくれてありがとう!
SQL Server プロファイラー (SSMS のツール メニュー) を使用して、これらのイベントをログに記録するトレースを作成します。
RPC:Completed
SP:Completed
SP:StmtCompleted
SQL:BatchCompleted
SQL:StmtCompleted
標準のトレース テンプレートから始めて、それを削除できます。これが特定のデータベース用かサーバー全体用かを指定していませんでした。特定のデータベースの場合は、DatabaseID 列を含め、DB にフィルターを設定します ( SELECT DB_ID('dbname')
)。各イベントに論理読み取りデータ列が含まれていることを確認してください。ファイルにログを記録するようにトレースを設定します。このトレースをバックグラウンドで無人で実行する場合は、トレース ファイルの最大サイズを 500MB または 1GB に設定することをお勧めします。あなたはそれを吸って見る必要があります)。
トレースを簡単に開始してから一時停止します。File->Export->Script Trace Definition に移動し、DB バージョンを選択して、ファイルに保存します。これで、プロファイラー GUI を介して実行するよりもオーバーヘッドがはるかに少ないトレースを作成する SQL スクリプトが作成されました。このスクリプトを実行すると、トレース ID (通常は@ID=2
) が出力されます。これを書き留めます。
トレース ファイル (.trc) を取得したら (最大ファイル サイズに達したためにトレースが完了したか、次のコマンドを使用して実行中のトレースを停止しました)
EXEC sp_trace_setstatus @ID、0
EXEC sp_trace_setstatus @ID、2
トレースをプロファイラーにロードするか、ClearTrace (非常に便利) を使用するか、次のようにテーブルにロードできます。
SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)
次に、クエリを実行して、次のようなデータを集計できます。
SELECT COUNT(*) AS TotalExecutions,
EventClass, CAST(TextData as nvarchar(2000))
,SUM(Duration) AS DurationTotal
,SUM(CPU) AS CPUTotal
,SUM(Reads) AS ReadsTotal
,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC
コストのかかるクエリを特定したら、実際の実行計画を生成して調べることができます。
次のスクリプトで結果が得られます。
SELECT TOP 10
SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads,
qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC
私はこのツールについて聞いたことがありませんでしたが、Microsoft は、最も遅いクエリを含め、まさにこれを提供する素晴らしい仕事をする一連のレポートを提供しています。パフォーマンス ダッシュボード レポートを確認してください。
それらが SQL 2008 と互換性があるかどうかはわかりませんが、チェックする価値があります。
新しいツールであるSQLServer2008のPerformanceStudioは、サーバーによって自動的に維持される動的管理ビューの上に構築され、サーバーのパフォーマンスの概要を示します。チェックする価値があります。
SQL Server プロファイラーは、必要なことを行いますか? 私はまだ 2008 を使用していないので、ツールがまだそこにあるかどうかはわかりませんが、そうである場合は、トレースを設定して、特定の基準 (実行して CPU を上に駆動するものなど) を満たすクエリをログに記録できると思います。特定のしきい値)。
プロジェクトでこれを使用しましたが、クエリの実行が不十分な場合のトラブルシューティングに非常に役立ちました (ただし、常に実行したままにしないでください。パフォーマンスの正常性の追跡には、一般的な Windows パフォーマンス カウンターを使用してください)。
(DELL)Quest SQL Optimizer for SQL Server 9.0 には、ユーザーが SQL Server で最もリソースを集中的に使用する SQL を見つけられるようにする SQL 検索モジュールが導入されています。 https://support.quest.com/softwaredownloads.aspx?pr=268445262