web-dev-qa-db-ja.com

高CPUクエリを見つける方法

CPU使用率が非常に高く、SQL Serverプロセスが大量のCPUを消費しています。いくつかのクエリを実行したところ、完了するまでに長い時間がかかるSPIDがいくつかあり、これらのクエリがCPUに高い圧力をかけている可能性があることに気付きました。各SQL ServerプロセスのCPUを大量に消費しているクエリを取得する方法はありますか?

CPUが90%を超えたときにアラートを送信し、高負荷のクエリを使用してアラートをメールで送信し、その中から1つを取得したいと思います。 CPUをより多く使用している高CPUスレッドを取得するために以下のプロセスを取得しましたが、スクリプトを使用して情報を取得する必要があります。スクリプトで this を実行する方法は?

SQL Server 2014
OS:Windows 2012 Server

3
Narendra

(私の)次の回答で3つの主要なクエリを見てください:

SQL Serverのパフォーマンス:PREEMPTIVE_OS_DELETESECURITYCONTEXT主要な待機タイプ

最初のクエリは、現在実行中のクエリを調べます。

2番目の2つのクエリ(「Query#1」と「Query#2」というラベルが付いている)は、組み合わせて機能し、一定期間にわたる高コストのクエリを見つけます。

アラートを取得するには、 Solarwinds Free WMI Monitor または Spiceworks Network Monitor などのオプションを調べます。

ある種の監視ソフトウェアが必要です。それらは私がWindows用に見つけた2つで、無料でした。無料のもののほとんどはUnix用であるか、少なくともUnixベースです。 Splunk および Zabbix も確認できます。リンクされた回答で提供したクエリは、これらの製品の少なくとも一部で使用できます。しかし、「X分間のCPU使用率が高い」という警告を出す必要があります。

また、スケジュールでポーリングし、スケジュールされ、SQL Serverにデータを保存し、古いデータをエージングアウトし、構成可能な時間枠での分散の割合を計算し、条件が満たされたときにアクションを実行する独自のシステムを作成することもできます。これはたくさんより多くの作業が必要になるため、より多くの作業が必要になります(ただし、上記がうまくいかない場合でも実行可能なオプションです) )。

4
Solomon Rutzky