ApsaraDB RDS for SQL Server の デッドロック タブでは、ご利用のインスタンスにおけるデッドロックイベントを表示します。表示内容には、トランザクション開始時刻、セッション ID、ロック済みリソース、およびデッドロックの種類が含まれます。これらの情報を活用して、デッドロックを引き起こす SQL ステートメントおよびトランザクションを特定・修正してください。
仕組み
トランザクションがリソースを変更する際、SQL Server はデータ整合性を保つため、そのリソースをロックして同時更新を防止します。
デッドロックとは、2 つのトランザクションが互いに相手が保持するロックを待機している状態です。たとえば、トランザクション A がリソース A をロックしリソース B を待機中であり、一方でトランザクション B がリソース B をロックしリソース A を待機中の場合、どちらのトランザクションも進行できなくなります。この状況において、SQL Server はいずれかのトランザクションを終了させます。

SQL Server はロールバックコストに基づいて終了対象のセッションを選択します。つまり、ロールバックに最も低いコストがかかるトランザクション(デッドロック被害者)を終了させます。たとえば、SELECT セッションと UPDATE セッションの間でデッドロックが発生した場合、ロールバックコストが低いため、SELECT セッションが終了されます。
基本概念
デッドロックの種類
ApsaraDB RDS for SQL Server では、以下のデッドロックの種類を検出します。
KeyDeadlock
ObjectDeadLock
RIDDeadlock
PageDeadlock
ComplieDeadlock
各タイプの詳細については、「ロックの粒度と階層」をご参照ください。
ロックモード
ロックモード は、リソースへのアクセス方法によって異なります。
共有 (S): 共有ロックが解放されるまで、リソースの読み取りは可能ですが、変更はできません。
更新 (U): リソースに対して排他ロックを取得するまで、他のトランザクションによる変更はできません。
排他的 (X): ロックを保持するトランザクションが排他ロックを解放するまで、他のトランザクションによるリソースへのアクセスは一切許可されません。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
RDS インスタンスが、クラウドディスク上で SQL Server 2008 R2 を実行していないこと
RDS インスタンスが、以下のリージョンのいずれかに配置されていること:中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深セン)、中国 (河源)、中国 (広州)、中国 (成都)、中国 (香港)、シンガポール、または UAE (ドバイ)
デッドロックの詳細情報の表示
インスタンス ページに移動します。上部のナビゲーションバーから、ご利用の RDS インスタンスが配置されているリージョンを選択し、その後、インスタンス ID をクリックします。
左側のナビゲーションウィンドウで、自律サービス > ロック最適化 を選択します。
デッドロックタブのリファレンス
デッドロック数
直近の時間範囲におけるデッドロックの発生回数を表示します。結果をフィルターするには、時間範囲を指定してください。

デッドロックの傾向
指定した時間範囲内におけるデッドロックの種類別の分布を表示します。

開始時刻 および 終了時刻 を設定し、検索 をクリックします。指定できる時間範囲は最大 30 日間です。
過去 24 時間、過去 7 日間、または 先月 をクリックして、あらかじめ定義された時間範囲を使用します。
グラフ上のデータポイントにマウスカーソルを合わせると、その時点におけるデッドロックの種類と発生回数を確認できます。
グラフ右上隅にあるアイコン
を使用して、表示スタイルを変更したり、グラフを画像としてダウンロードしたりできます。
デッドロックの詳細

デッドロックレコード横の
アイコンをクリックすると、ブロッキングおよびブロッキングされたセッションの詳細が展開されます。
| フィールド | 説明 |
|---|---|
| LastTranStarted | セッション内でトランザクションが開始された時刻 |
| SPID | セッション ID |
| IsVictim | 当該セッションがデッドロック被害者として終了されたかどうか |
| LogUsed | セッション内で生成されたトランザクションログのサイズ(バイト単位) |
| LockMode | セッションが保持しているロックモード |
| WaitResourceDesc | トランザクションが待機中のリソースの詳細 |
| ObjectOwned | セッションがロックしているオブジェクト |
| ObjectRequested | トランザクションがロックしようとしているオブジェクト |
| WaitResource | トランザクションが待機中のリソースの名前 |
| HostName | トランザクションが実行されているホスト |
| LoginName | トランザクションを実行するために使用されたアカウント |
| Status | セッション内のトランザクションのステータス |
| ClientApp | トランザクションを開始したクライアント |
| SQLText | セッション内で実行された SQL ステートメント。分析のためにコピーするには、ステートメントをクリックします。 |
デッドロックレコードをクリックすると、デッドロックダイアグラム セクションが開きます。
デッドロックダイアグラム

ブロックしているセッションおよびブロックされたセッションの関係、およびロック済みリソースの詳細を表示します。[ダウンロード] をクリックして XDL ファイルをダウンロードし、SQL Server Management Studio (SSMS) で開いて、完全なデッドロック グラフを表示します。
次のステップ
ApsaraDB RDS for SQL Server インスタンスでデッドロックが発生した場合はどうすればよいですか?