Database Autonomy Service (DAS) は、ApsaraDB RDS for SQL Serverのロック最適化機能を提供します。 この機能を使用して、ApsaraDB RDS for SQL Serverインスタンスのデッドロック統計を表示できます。
使用状況ノート
標準SSDまたは拡張SSD (ESSD) でSQL Server 2008 R2を実行するRDSインスタンスはサポートされていません。
背景情報
トランザクションを実行して特定のリソースを変更する場合、リソースはロックされ、他の同時トランザクションによる変更を防止します。 これによりデータの整合性が保証されます。
ほとんどの場合、複数のトランザクションが同じリソースを求めて競合すると、デッドロックが発生します。 次の例では、トランザクションAがリソースAを変更しているときに、トランザクションBによって変更されているリソースBを変更する要求も開始します。この場合、デッドロックが発生します。 
デッドロックの問題を解決するために、SQL Serverは、他のトランザクションよりも低コストでロールバックできるトランザクションを終了します。 終了したトランザクションでタスクを完了する場合は、トランザクションを再度実行する必要があります。
ApsaraDB RDSは、ApsaraDB RDSコンソールでさまざまなデッドロックの統計を提供します。 データベースで発生するさまざまなタイプのデッドロックをすばやく見つけることができます。 デッドロック統計には、ブロッキングおよびブロックされたトランザクションの開始時間、ブロッキングおよびブロックされたセッションのID、ロックされたリソースに関する詳細、および発生するデッドロックのタイプが含まれます。 デッドロックの原因となる問題のあるSQL文やその他の例外を特定し、RDSインスタンスを最適化してデッドロックの問題を解決できます。
デッドロックタイプ
ApsaraDB RDSは、次のタイプのデッドロックを分析できます。
KeyDeadlock
ObjectDeadLock
RIDDeadlock
PageDeadlock
ComplieDeadlock
各タイプのデッドロックの詳細については、 ロックの粒度と階層。
ロックモード
ApsaraDB RDS for SQL Serverは、同時トランザクションによるリソースへのアクセス方法を決定するさまざまなロックモードを使用してリソースをロックします。 トランザクションによってアクセスされるリソースをロックするために使用されるロックモードは、トランザクションによって必要とされる操作のタイプに基づいて変化する。 ApsaraDB RDS for SQL Serverは、次のロックモードをサポートしています。
共有 (S): トランザクションがリソースの共有ロックを取得した後、リソースは読み取りのみ可能ですが、トランザクションが共有ロックを解放するまで変更できません。
更新 (U): トランザクションがリソース上の更新ロックを取得した後、別のトランザクションがリソース上の排他ロックを取得するまで、別のトランザクションによってリソースを変更することはできません。
排他的 (X): トランザクションがリソース上の排他的ロックを取得した後、前のトランザクションが排他的ロックを解放するまで、リソースは別のトランザクションによってアクセスされることができない。
ロックモードの詳細については、 ロックモード。
手順
DASコンソールにログインします。
左側のナビゲーションウィンドウで、インスタンスモニターをクリックします。
表示されるページで、管理するデータベースインスタンスを見つけ、インスタンスIDをクリックします。 インスタンス詳細ページが表示されます。
左側のナビゲーションウィンドウで、ロックの最適化 をクリックします。 [ロックの最適化] ページで、[DeadLock] タブをクリックします。
[DeadLock] タブで、ApsaraDB RDS for SQL Serverインスタンスのデッドロック統計を表示します。
[DeadLock] タブの情報
数のデッドロック

このセクションには、さまざまな期間に発生したデッドロックの数が表示されます。
デッドロックトレンド

このセクションには、特定の期間に発生したさまざまなタイプのデッドロックが表示されます。 デッドロック情報を照会するには、次の操作を実行します。
開始時刻と終了時刻を指定し、検索をクリックして、指定した時間範囲内に発生したデッドロックの傾向を表示します。
説明指定された開始時間と終了時間の間隔は30日を超えることはできません。
[過去24時間] 、[過去7日間] 、または [先月] をクリックして、前日、過去7日間、または前月に発生したデッドロックの傾向を表示します。
トレンドチャートの特定の時点にポインターを移動して、その時点で発生したデッドロックの種類と数を表示します。
トレンドチャートの右上隅で、ビジネス要件に基づいて
アイコンをクリックします。 トレンドチャートの表示スタイルを変更したり、トレンドチャートをダウンロードしたりできます。
デッドロックの詳細

デッドロックの詳細を表示します。 デッドロックレコードの左側にある
アイコンをクリックすると、ブロックされたセッションとブロックされたセッションの詳細が表示されます。 詳細には、次の情報が含まれます。LastTranStarted: セッションでトランザクションが開始された時点。
SPID: セッションID。
IsVictim: セッションが終了するかどうかを示します。
説明DASは、内部デッドロックモニタスレッドを使用して、ApsaraDB RDS for SQL Serverインスタンスのデッドロックを定期的に検出します。 デッドロックが検出された場合、DASは、デッドロックに関連するブロッキングおよびブロックされたセッションを評価し、他のセッションよりも低コストでトランザクションをロールバックできるセッションを終了します。 たとえば、SELECTステートメントを実行するセッションとUPDATEステートメントを実行するセッションの間でデッドロックが発生します。 SELECTステートメントは、UPDATEステートメントよりも低コストでロールバックできます。 この場合、DASはSELECTステートメントを実行するセッションを終了します。
LogUsed: セッションで生成されたログのサイズ。 単位はバイトです。
LockMode: デッドロックのロックモード。 詳細については、このトピックの「モードのロック」セクションをご参照ください。
WaitResourceDesc: トランザクションがセッションで待機しているリソースの詳細。
ObjectOwned: セッションでロックされているオブジェクト。
ObjectRequested: トランザクションがセッションでロックすることを要求するオブジェクト。
WaitResource: トランザクションがセッションで待機しているリソースの名前。
HostName: セッション内のトランザクションが実行されるホストの名前。
LoginName: セッションでトランザクションを実行するために使用されるアカウントのユーザー名。
ステータス: セッション内のトランザクションのステータス。
ClientApp: セッションでトランザクションを開始するクライアントの名前。
SQLText: セッションで実行されるSQL文の詳細。
説明SQL文をクリックしてSQL文ウィンドウを開き、その後のトレースとトラブルシューティングのためにSQL文をコピーします。
デッドロックレコードをクリックして、デッドロックダイアグラムセクションのデッドロックのダイアグラムを表示します。
デッドロック図

このセクションでは、ブロックセッションとブロックセッションの関係を表示します。 このセクションでは、デッドロックでロックされたリソースの詳細も表示されます。 [ダウンロード] をクリックすると、ダイアグラムをXDLファイルとしてダウンロードできます。 XDLファイルにはデッドロックの詳細が含まれています。 SQL Server Management Studio (SSMS) クライアントでファイルを開いて表示できます。 詳細については、「SQL Server Management Studio (SSMS) のダウンロード」をご参照ください。