9

SQL Server 2005 クラスターで散発的でランダムなクエリ タイムアウトが発生しています。私はそれを使用するいくつかのアプリを所有しているので、調査を手伝っています. 通常の古い Perfmon で CPU 時間の割合を見ると、確実に固定されていることがわかります。ただし、SQL アクティビティ モニターは、プロセスによって使用された累積 CPU および IO 時間のみを提供し、その時点または特定の時間枠で使用されているものではありません。おそらく、プロファイラーを使用してトレースを実行することもできますが、このクラスターは非常に頻繁に使用されているため、干し草の山から針を探すことになるのではないかと心配しています。私は間違った木を吠えていますか?

この環境で高価なクエリ/プロセスを追跡するための良い方法はありますか?

4

7 に答える 7

12

これにより、平均 CPU 時間で上位 50 のステートメントが得られます。他のスクリプトについては、こちらを確認してください: http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50
        qs.total_worker_time/qs.execution_count as [Avg CPU Time],
        SUBSTRING(qt.text,qs.statement_start_offset/2, 
            (case when qs.statement_end_offset = -1 
            then len(convert(nvarchar(max), qt.text)) * 2 
            else qs.statement_end_offset end -qs.statement_start_offset)/2) 
        as query_text,
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid 
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY 
        [Avg CPU Time] DESC
于 2008-08-18T15:09:27.683 に答える
4

パフォーマンス ダッシュボード レポートが非常に役立つことがわかりました。これらは、Microsoft が提供する一連のカスタム RS レポートです。クライアント PC でインストーラーを実行し、SQL Server インスタンスで setup.sql を実行するだけです。

その後、SSMS でデータベース (どのデータベースでも構いません) を右クリックし、[レポート] -> [カスタム レポート] に移動します。デフォルトで \Program Files\Microsoft SQL Server\90\Tools\PerformanceDashboard フォルダにある performance_dashboard_main.rdl に移動して選択します。これは一度だけ行う必要があります。初回以降は、レポート リストに表示されます。

メインのダッシュボード ビューには、時間の経過に伴う CPU 使用率などが表示されます。たまにリフレッシュできます。スパイクが見られたら、グラフのバーをクリックするだけで、その背後にある詳細データを取得できます。

于 2008-08-18T16:34:43.987 に答える
3

Quest のSpotlight製品を使用しています。明らかに、これは時間とお金への投資であるため、短期的には役に立たないかもしれませんが、大規模な SQL 環境を使用している場合は非常に便利です。

于 2008-08-18T15:01:41.693 に答える
3

Yaakov が言うように、通常の負荷でプロファイラーを数分間実行し、結果をテーブルに保存します。これにより、結果に対してクエリを実行できるようになり、リソースを大量に消費するクエリを簡単に見つけることができます。

于 2008-08-18T15:13:47.503 に答える
2

Erland Sommarskog によるこのユーティリティは非常に便利です。

これは、データベースに追加するストアド プロシージャです。アクティブなクエリを確認し、ロックやブロックなどの全体像を把握したいときはいつでも実行してください。物事がうまくいかないように見えるときに定期的に使用します。

于 2008-08-18T16:27:51.037 に答える
2

Profiler は「干し草の山の中の針」のアプローチのように見えるかもしれませんが、役に立つものになるかもしれません。データベースに通常の負荷がかかっている状態で数分間実行してみて、時間がかかりすぎたり、何らかの方法でリソースを占有しているクエリが目立っていないかどうかを確認してください。このような状況は、何らかの一般的な問題を示している可能性がありますが、1 つまたは 2 つのサイトの特定の問題に関連している可能性もあります。これらの問題は、特定の状況で混乱を招き、全体的にパフォーマンスが非常に低下する原因となります。

于 2008-08-18T14:47:52.907 に答える
2

プロファイラーを実行し、特定の数を超える読み取りを行うクエリをフィルター処理します。私が取り組んだアプリケーションの場合、5000 回以上の読み取りを行った非レポート クエリは、再検討する価値がありました。アプリのしきい値は異なる場合がありますが、考え方は同じです。

于 2008-08-18T15:24:17.123 に答える