66

sql2k8のアクティビティモニターを使用すると、最もコストのかかるクエリを確認できます。わかりました、それは素晴らしいですが、この情報をログに記録したり、クエリアナライザーを介してこの情報を取得したりする方法はありますか?SQL Managementコンソールを開いて、アクティビティモニターダッシュボードを見たくありません。

どのクエリが適切に記述されていないか、スキーマが適切に設計されていないかなどを把握したい。

助けてくれてありがとう!

4

6 に答える 6

67
  1. SQL Server プロファイラー (SSMS のツール メニュー) を使用して、これらのイベントをログに記録するトレースを作成します。

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. 標準のトレース テンプレートから始めて、それを削除できます。これが特定のデータベース用かサーバー全体用かを指定していませんでした。特定のデータベースの場合は、DatabaseID 列を含め、DB にフィルターを設定します ( SELECT DB_ID('dbname'))。各イベントに論理読み取りデータ列が含まれていることを確認してください。ファイルにログを記録するようにトレースを設定します。このトレースをバックグラウンドで無人で実行する場合は、トレース ファイルの最大サイズを 500MB または 1GB に設定することをお勧めします。あなたはそれを吸って見る必要があります)。

  3. トレースを簡単に開始してから一時停止します。File->Export->Script Trace Definition に移動し、DB バージョンを選択して、ファイルに保存します。これで、プロファイラー GUI を介して実行するよりもオーバーヘッドがはるかに少ないトレースを作成する SQL スクリプトが作成されました。このスクリプトを実行すると、トレース ID (通常は@ID=2) が出力されます。これを書き留めます。

  4. トレース ファイル (.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

コストのかかるクエリを特定したら、実際の実行計画を生成して調べることができます。

于 2008-11-03T04:35:07.533 に答える
22

次のスクリプトで結果が得られます。

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 
于 2011-11-27T11:52:12.637 に答える
4

私はこのツールについて聞いたことがありませんでしたが、Microsoft は、最も遅いクエリを含め、まさにこれを提供する素晴らしい仕事をする一連のレポートを提供しています。パフォーマンス ダッシュボード レポートを確認してください。

それらが SQL 2008 と互換性があるかどうかはわかりませんが、チェックする価値があります。

于 2009-12-12T02:16:53.507 に答える
2

新しいツールであるSQLServer2008のPerformanceStudioは、サーバーによって自動的に維持される動的管理ビューの上に構築され、サーバーのパフォーマンスの概要を示します。チェックする価値があります。

于 2011-04-20T10:55:43.657 に答える
2

SQL Server プロファイラーは、必要なことを行いますか? 私はまだ 2008 を使用していないので、ツールがまだそこにあるかどうかはわかりませんが、そうである場合は、トレースを設定して、特定の基準 (実行して CPU を上に駆動するものなど) を満たすクエリをログに記録できると思います。特定のしきい値)。

プロジェクトでこれを使用しましたが、クエリの実行が不十分な場合のトラブルシューティングに非常に役立ちました (ただし、常に実行したままにしないでください。パフォーマンスの正常性の追跡には、一般的な Windows パフォーマンス カウンターを使用してください)。

于 2008-11-03T04:12:55.643 に答える
0

(DELL)Quest SQL Optimizer for SQL Server 9.0 には、ユーザーが SQL Server で最もリソースを集中的に使用する SQL を見つけられるようにする SQL 検索モジュールが導入されています。 https://support.quest.com/softwaredownloads.aspx?pr=268445262

于 2013-06-14T08:42:56.880 に答える