SQL Server 2008が高負荷で失敗するという問題に直面しています。その荷重ケースを見つけて、荷重を処理できるようにコードを最適化する必要があります。私はインターネットでSQLプロファイラーを使用してデータベースの相互作用を追跡し、後で分析して問題が発生する正確なポイントを見つけることができることを発見しました。SQLプロファイラーを起動する方法についても発見しました。しかし、私の質問は、SQLプロファイラーを起動することで、サーバーのパフォーマンスに影響を与えるということですか?
SQL Server 2008が高負荷で失敗するという問題に直面しています。その荷重ケースを見つけて、荷重を処理できるようにコードを最適化する必要があります。私はインターネットでSQLプロファイラーを使用してデータベースの相互作用を追跡し、後で分析して問題が発生する正確なポイントを見つけることができることを発見しました。SQLプロファイラーを起動する方法についても発見しました。しかし、私の質問は、SQLプロファイラーを起動することで、サーバーのパフォーマンスに影響を与えるということですか?
回答:
SQL Serverプロファイラは、クライアント側からSQL Server Traceを利用するGUIです。この性質により、はい、環境によってはパフォーマンスに軽度から深刻な影響が出る可能性があります。
SQL Serverプロファイラは、主にサーバーで何が起こっているかを簡単に垣間見るのに適しています(データベースサーバーが追加の待機時間を処理できる場合)。長期間実行するためのものではありません。トレースを長くするには、サーバー側のトレースまたは拡張イベントを使用します。
サーバー側トレースを使用すると、パフォーマンスへの影響を最小限に抑えることができます。
textdata LIKE '%foo%'
:)逆の効果があります。あまりにも多くの変数があり、魔法のような期待を提供することはできません。ただ試してみるだけです。ただし、実際にはサーバー側のトレースを使用する必要があります。
以前のポスターが言ったすべてが正しいです。プロファイラーは、ある時点でDMOを使用し、現在はSMOを使用してトレースイベントをキャプチャするアプリケーションです。これは、単にサーバー側のトレースを使用する場合と比較して、膨大な量のオーバーヘッドを追加します。
SMOは、クライアントアプリケーションであるプロファイラーとともにトレースプロセスに追加の「層」を追加するAPIです。サーバー側のトレースは、トランザクションキューからトレースイベントを直接読み取ります。その結果、オーバーヘッドは無視できます。
1秒あたり10,000以上のトランザクションを処理するSQL Server環境でサーバー側のトレースを実行できました。同じ環境でプロファイラーを使用すると、データベースインスタンスが完全に機能しなくなります。実稼働環境では、データベースアクティビティをトレースする必要がある場合は、常にサーバー側のトレースを使用してください。プロファイラはデータベースインスタンスを強制終了します。
はい、SQL Server Profilerはパフォーマンスに影響します。
GUIを使用してトレースすると、すべてのイベントが同期的に処理およびフィルタリングされるため、サーバーの負荷、ネットワーク遅延、収集するイベント、および収集されたイベントが格納される場所などのすべての要素がオーバーヘッドに影響します。
他の回答が示唆しているように、GUIの代わりにサーバー側のトレースを使用することをお勧めします。ただし、このメソッドは非推奨であり、代わりに拡張イベントを使用する必要があります。(注:トレースよりも軽量な拡張イベントを使用しても、サーバーに望ましくない量の負荷を追加することは可能です-イベントを設定するときのオーバーヘッドを最小限に抑える方法については、2番目の段落のリストを参照してくださいセッション。)
負荷の高いサーバーの場合は、測定されるプロセス自体が調査対象の問題に影響を与える可能性があるため、収集される情報に細心の注意を払う必要があります。
SQL Serverプロファイラは2つのステップで機能します。最初に、すべてのクエリをログに記録するように指示します。次に、いくつかの典型的なトランザクションを実行します(または、プロダクションに対してログを記録させます)。これにより、「テスト負荷」が作成されます。次に、テスト負荷を使用して実際のプロファイリング(分析)を行います。
ロギング自体は、特にクエリ自体のコストと比較して、それほど高価ではありません。