ApsaraDB RDS for SQL Server の [デッドロック] ページでは、トランザクションの開始時刻、セッション ID、ロックされたリソース、デッドロックの種類などの詳細が表示され、デッドロックの原因となる問題のある SQL ステートメントを迅速に特定して解決するのに役立ちます。このトピックでは、ApsaraDB RDS for SQL Server インスタンスのデッドロックとその詳細を ApsaraDB RDS コンソールで表示する方法について説明します。
背景情報
トランザクションがリソースを変更すると、他のトランザクションによる変更を防ぐためにロックが適用され、データ整合性が確保されます。
デッドロックは通常、複数のトランザクションがリソースを競合する場合に発生します。たとえば、トランザクション A がリソース A をロックしてリソース B を変更しようとし、トランザクション B がリソース B をロックしてリソース A を変更しようとします。この循環依存によってデッドロックが発生し、各トランザクションは、もう一方がロックを解放するのを待機することになります。その後、システムはロールバックコストが最も低いセッション (犠牲セッション) を自動的に終了させ、そのタスクは失敗します。次の図は、このシナリオを示しています。

デッドロックの種類
[デッドロック] ページには、次の 5 種類のデッドロックの統計が表示されます:
-
KeyDeadlock
-
ObjectDeadlock
-
RIDDeadlock
-
PageDeadlock
-
CompileDeadlock
ロックモード
トランザクションがリソースにアクセスするとき、アクセスの種類に基づいて、さまざまな ロックモード (LockMode) を使用します。次のようなものがあります:
-
共有ロック (S):ロックされている間は、リソースの読み取りは許可されますが、変更は許可されません。
-
更新ロック (U):他のトランザクションがリソースに対して排他ロックを取得するのを防ぎ、リソースを変更する意図があることを示します。このロックは通常、複数のセッションがリソースを読み取り、ロックしてから更新しようとするときに発生する可能性のあるデッドロックを回避するために使用されます。
-
排他ロック (X):他のトランザクションがリソースにアクセスするのを防ぎます。
前提条件
-
この機能は、クラウドディスクを使用する 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)。
デッドロックの詳細
- RDSインスタンスにアクセスし、上部のリージョンを選択し、対象のRDSインスタンスのIDをクリックします。
-
左側のナビゲーションペインで、 を選択します。
[デッドロック] ページ
-
[デッドロック数]
このセクションでは、最近のデッドロック数が、[過去 24 時間のデッドロック]、[過去 7 日間のデッドロック]、[過去 2 週間のデッドロック]、[過去 1 か月のデッドロック] の 4 つの期間で表示されます。
-
[デッドロックの傾向]
このセクションでは、指定した期間におけるデッドロックの傾向がグラフで表示されます。次の操作を実行できます:
-
開始日 と 終了日 を選択し、検索 をクリックすると、指定した時間範囲のデッドロック情報を表示できます。時間範囲は 30 日を超えることはできません。
-
最近一日、最近一週間、または 最近一ヶ月 をクリックすると、その期間のデッドロック情報をすばやく表示できます。
-
特定の時点にカーソルを合わせると、その時点で発生したデッドロックの種類と数が表示されます。
-
傾向グラフの右上隅にある
アイコンをクリックして、グラフの表示スタイルを変更したり、グラフをダウンロードしたりできます。

-
-
[デッドロックの詳細情報]
デッドロックレコードの横にある
アイコンをクリックして、デッドロックされたセッションの詳細を表示します。詳細は次のとおりです:-
LastTranStarted:トランザクションが開始された時刻。
-
SPID:トランザクションを開始したセッションの ID。
-
IsVictim:セッションがデッドロックを解決するために終了 (強制終了) されたかどうかを示します。
説明SQL Server は、デッドロックを定期的にチェックする内部スレッドを使用してデッドロックを解決します。デッドロックが検出されると、SQL Server は関連するセッションの中でロールバックコストが低い方のセッションを終了します。たとえば、
SELECTステートメントは通常UPDATEステートメントよりもコストが低いため、システムはSELECTステートメントを実行するセッションを優先的に終了します。 -
LogUsed:セッションによって生成されたログのサイズ。単位:バイト。
-
LockMode:ロックモード。
-
WaitResourceDesc:現在のトランザクションが待機しているリソースの説明。
-
ObjectOwned:すでにロックされているオブジェクト。
-
ObjectRequested:現在のトランザクションがロックを要求しているオブジェクト。
-
WaitResource:現在のトランザクションが待機しているリソース。
-
HostName:現在のトランザクションのホスト名。
-
LoginName:現在のトランザクションのアカウント名。
-
Status:現在のトランザクションのステータス。
-
ClientApp:現在のトランザクションで使用されるクライアントアプリケーションの名前。
-
SQLText:SQL ステートメントの詳細。
説明クリックしてコピー をクリックすると SQL 文がコピーされ、トラブルシューティングや分析が容易になります。
詳細リストの任意の行をクリックすると、対応するデッドロック図が下に表示されます。
-
-
[デッドロック図]
このセクションでは、デッドロックしたセッション間の関係と、ロックされたリソースに関する詳細が表示されます。クリックしてダウンロード ボタンをクリックして、現在のデッドロックの詳細を含む XDL ファイルをダウンロードできます。このファイルは SQL Server Management Studio (SSMS) を使用して開いて表示できます。
