Sql2k8のアクティビティモニターを使用すると、最も高価なクエリを確認できます。 OK、それは素晴らしいことですが、この情報を記録したり、クエリアナライザーでこの情報を取得したりする方法はありますか? SQL管理コンソールを開きたくないので、アクティビティモニターダッシュボードを見ています。
どのクエリが適切に記述されていないか/スキーマが適切に設計されていないなどを把握したい.
助けてくれてありがとう!
SQL Server Profiler(SSMSの[ツール]メニュー)を使用して、これらのイベントを記録するトレースを作成します。
_ RPC:Completed
SP:Completed
SP:StmtCompleted
SQL:BatchCompleted
SQL:StmtCompleted
_
標準のトレーステンプレートから開始して、それを整理できます。特定のデータベース用であるか、サーバー全体用であるかを指定しませんでした。特定のデータベース用である場合、DatabaseID列を含め、DBにフィルターを設定します(SELECT DB_ID('dbname')
)。各イベントに論理読み取りデータ列が含まれていることを確認してください。ファイルに記録するようにトレースを設定します。このトレースをバックグラウンドで無人で実行する場合、十分なスペースがある場合は最大トレースファイルサイズを500MBまたは1GBに設定することをお勧めします(すべてはサーバー上のアクティビティの量に依存するため、あなたはそれを吸って見なければならないでしょう)。
トレースを短時間開始してから一時停止します。 「ファイル」->「エクスポート」->「スクリプトトレース定義」に移動し、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互換かどうかはわかりませんが、チェックアウトする価値があります。
SQL Server 2008には、サーバーによって自動的に維持される動的管理ビューの上に構築される新しいツール Performance Studio があり、サーバーのパフォーマンスの概要を示します。チェックアウトする価値があります。
SQL Server Profilerは必要なことを行いますか? 2008はまだ使用していないので、ツールがまだ存在するかどうかはわかりませんが、トレースを設定して、特定の条件を満たすクエリ(CPUを実行し、上記のCPUを実行するクエリなど)特定のしきい値)。
私たちはこれをプロジェクトで使用しており、実行が不十分なクエリのトラブルシューティングに役立っています(フルタイムのままにしてはいけませんが、パフォーマンスヘルスの追跡には一般的なWindowsパフォーマンスカウンターを使用してください)。
(Dell)Quest SQL Optimizer for SQL Server 9.0には、ユーザーがSQL Serverで最もリソースを消費するSQLを見つけることができるFind SQLモジュールが導入されています。 https://support.quest.com/softwaredownloads.aspx?pr=268445262