このトピックでは、ロックブロッキング統計ページを使用して、長時間のブロッキングを引き起こしているセッションを迅速に特定し、その詳細を表示する方法について説明します。
前提条件
-
インスタンスはクラウドディスクを使用している必要があります。
-
この機能は、クラウドディスクを使用する ApsaraDB RDS for SQL Server 2008 R2 インスタンスでは利用できません。
-
この機能は、次のリージョンにある ApsaraDB RDS for SQL Server インスタンスでのみ利用できます:China (Hangzhou)、China (Shanghai)、China (Qingdao)、China (Beijing)、China (Zhangjiakou)、China (Hohhot)、China (Ulanqab)、China (Shenzhen)、China (Heyuan)、China (Guangzhou)、China (Chengdu)、China (Hong Kong)、Singapore、UAE (Dubai)。
背景情報
SQL Server では、データの一貫性を維持するために、セッションがリソースを変更するときに、システムがそのリソースに対するロックを取得します。 これにより、他の同時セッションが同じリソースにアクセスしたり、変更したりするのを防ぎます。 通常の状態では、ロックは短時間保持され、変更が完了した後に解放され、次のセッションがリソースにアクセスできるようになります。 ただし、低速 SQL ステートメントなどの問題により、リソースが長期間ロックされ、パフォーマンスに深刻な影響を与える可能性があります。
この問題に対処するために、ApsaraDB RDS for SQL Server はロックブロッキング統計ページを提供します。 このページでは、ブロッキングセッションのサーバープロセス ID (SPID)、ブロッキングが発生した時間、ブロッキングの原因となった SQL ステートメントなどの情報をすばやく確認できます。 この情報は、根本原因を特定するのに役立ちます。
仕組み
約 2 秒間ブロックされたセッションは、通常、大きな問題を引き起こしません。 ただし、短時間に複数のセッションが 2 秒を超えて繰り返しブロックされると、システム全体に大きな影響を与える可能性があります。
システムは 10 秒ごとにロックブロッキングをサンプリングします。 各サンプリングポイントで、セッションが SQL ステートメントを 2 秒を超えて実行しており、他のセッションをブロックしている場合、システムはそれをキャプチャして、ロックブロッキング統計ページに記録します。
操作手順
- RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
-
左側メニューで、自律型サービス > ロックの最適化 を選択します。
-
ロックブロック タブをクリックして、インスタンスのブロッキングの詳細を表示します。
ページの説明
-
ブロッキングの概要
指定した時間範囲内のブロッキングイベントの数を表示します。
時間範囲には、[過去 24 時間]、[過去 7 日間]、[過去 14 日間]、[過去 30 日間] があります。
-
ブロッキング期間の傾向
選択した期間におけるブロッキング期間の傾向グラフを表示します。
特定の時点にカーソルを合わせると、ブロッキングの詳細が表示されます。詳細には次の情報が含まれます。
-
ブロッキングが発生した時間。
-
Processes_blocked:ブロックされたセッションの数。
-
Uncommited_tran:コミットされていないトランザクションの数。
説明コミットされていないトランザクションはロックを解放しません。
-
QueryHash (特定の SQL ステートメントのハッシュ値) および対応するブロッキング時間。

-
-
ブロッキングソースの詳細
ブロッキングソースに関する詳細情報を表示します。詳細には次の情報が含まれます。
-
SPID:ブロッキングセッションの SPID。
-
QueryHash:SQL ステートメントから生成されたハッシュ値。 同じタイプの SQL ステートメントは同じ QueryHash を共有します。
-
[待機タイプ]:待機中のセッションがブロックされている理由。 待機の種類の詳細については、「待機の種類」をご参照ください。
-
[実行時間 (ms)]:セッションの実行期間。
-
[SQL]:ブロッキングの原因となった SQL ステートメント。
説明SQL ステートメントにカーソルを合わせ、右側に表示される
アイコンをクリックして SQL ステートメントをコピーします。 -
[時間]:ブロッキングが発生した時間。
-
[データベース名]:ブロッキングが発生したデータベースの名前。
行の任意の場所をクリックすると、ページの下部に対応するブロッキング図が表示されます。
-
-
ブロッキング図
ブロッキング SPID (赤)、ブロックされた SPID (青)、ロックの種類、ブロッキング期間を表示します。 ロックの種類の詳細については、「ロックの種類」をご参照ください。

SPID にカーソルを合わせると、ブロッキングの詳細が表示されます。詳細には次の情報が含まれます。
-
SPID:サーバープロセス ID。
-
BlockedBySpid:ブロッキングセッションの SPID。
-
WaitType:待機の種類。
-
WaitTimeMs:ブロッキング期間 (ミリ秒単位)。
-
CMD:現在のセッションの SQL コマンドタイプ。
-
[CPU]:CPU 時間 (ミリ秒単位)。
-
DBName:データベース名。
-
ClientAppName:クライアントアプリケーション名。
-
HostName:クライアントのホスト名。
-
LoginId:ユーザー名。
-
PhysicalIO:現在のセッションで消費された I/O。 1 PhysicalIO は 8 KB に相当します。
-
QueryHash:SQL ステートメントから生成されたハッシュ値。 同じタイプの SQL ステートメントは同じ QueryHash を共有します。
-
StartTime:現在のバッチの開始時刻。 バッチには複数の SQL ステートメントを含めることができ、変数値などのリソースを共有できます。
-
Status:現在のセッションのステータス。
-
[SQL]:赤または青の SPID をクリックすると、ブロッキング図の下に SQL 実行の詳細が表示されます。
-
-
SQL の詳細
ブロッキング図 で、赤または青の SPID をクリックすると、そのセッションの SQL 実行の詳細が表示されます。 クリックしてコピー をクリックすると、分析やトラブルシューティングのために SQL ステートメントをすばやくコピーできます。