RESOURCE_SEMAPHORE待ちが発生する(処理遅延トラブル)SQL Serverトラブルシューティング(65)(1/2 ページ)

本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。今回は「RESOURCE_SEMAPHORE待ちが発生した」場合の解決方法を解説します。

» 2018年02月07日 05時00分 公開
[椎名武史ユニアデックス株式会社]

SQL Serverトラブルシューティング一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 54(カテゴリー:処理遅延トラブル): RESOURCE_SEMAPHORE待ちが発生した

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します(本トラブルシューティングの対応バージョン:SQL Server 全バージョン)。

トラブルの実例:比較的大きなSELECT処理を実行したにもかかわらず、リソースの使用状況に大きな変化がなく、処理が止まっているように見える。他に処理を実行しているものの、全て参照系の処理のため、ロック待ちが発生しているとは考えにくい。

 dm_exec_requestsで状況を確認してみると、statusはsuspendedになっており、wait_typeは「RESOURCE_SEMAPHORE」と表示されていた(図1)。

図1 図1 RESOURCE_SEMAPHOREという待ちが発生

トラブルの原因を探る

 実行する処理の中に並べ替えやインデックス作成動作などが含まれている場合は、メモリ上に「Workspace Memory」と呼ばれる作業領域を事前に確保する必要があります。Workspace Memoryとして使用可能なメモリ量を超えて、新たな処理がWorkspace memoryを要求するとRESOURCE_SEMAPHOREの待ちが発生します。

 この状況はパフォーマンスログでも確認できます。Memory Managerオブジェクト(*1)の「Maximum Workspace Memory (KB)」「Granted Workspace Memory (KB)」「Memory Grants Outstanding」「Memory Grants Pending」などのカウンタの値に注意してください(図2)。

 特に「Memory Grants Pending」はWorkspace Memory待ちの数を表しているため、処理遅延時の確認ポイントの1つとなります。


図2 図2 Memory Grants Pendingの値が0ではなかった


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。