SQL Server の負荷を確認する方法

Microsoft SQL Server において、CPU 負荷をかけているクエリを確認する方法を紹介します。

CPU 負荷をかけているクエリ確認方法

「ファイル名を指定して実行(Windows + R)」から perfmon を入力・実行し、パフォーマンスモニターを起動します。
次にパフォーマンスモニターを選択し、「追加ボタン」をクリックします。

Thread カウンターの %Processor TimeID Thread を選択し、<すべてのインスタンス> を選択して「検索」をクリックします。

sqlservr/数字 を全て選択して「追加」をクリックし「OK」をクリックします。

グラフの種類を「レポート」に変更します。

%Processor Time(負荷)が上昇している ID Thread を検索します。
本例では、ID Thread 3948 の負荷が上昇しています。

SQL Management Studio で「新しいクエリ」をクリックし、以下のクエリを実行して ID Thread 3948 の詳細を確認します。

SELECT spid, kpid, dbid, cpu, memusage , status, open_tran
FROM sys.sysprocesses 
WHERE kpid = 3948

本例では、dpid(DB を示す ID)は 1、sqid(DB に対するクエリを示す ID) 53 となっています。

以下のクエリを実行して、どの DB に負荷がかかっているかを確認します。

SELECT database_id, name 
FROM sys.databases 
WHERE database_id = 1

本例では、DB は master となっています。

以下のクエリを実行して、DB に負荷をかけているクエリを確認します。

dbcc inputbuffer(53)

DB に負荷をかけているクエリの情報が表示されます。

参考:テスト負荷の作成

SQL Server の CPU に、テスト負荷をかけるクエリを作成することができます。
SQL Management Studio で「新しいクエリ」をクリックします。

以下のクエリを実行します。

DECLARE @Str varchar(100)

WHILE (1=1)
BEGIN
	SET @Str = @@CPU_BUSY
END

リソースモニターで sqlservr.exe プロセスの CPU 使用率が上昇していることを確認できます。

以上

参考書籍

SQL Server 2016の教科書 基礎から実践まで学べる 開発編