Database Autonomy Service (DAS) は、ApsaraDB RDS for SQL Server 向けに ロックの最適化 機能を提供します。この機能を使用すると、データベースインスタンス内のデッドロックとその詳細を表示できます。
前提条件
-
この機能は、クラウドディスクを使用する ApsaraDB RDS for SQL Server 2008 R2 インスタンスではサポートされていません。
-
インスタンスは、次のいずれかのリージョンに存在する必要があります:
中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (フフホト)、中国 (ウランチャブ)、中国 (深セン)、中国 (河源)、中国 (広州)、中国 (成都)、中国 (香港)、シンガポール、および UAE (ドバイ)。
背景情報
トランザクションがリソースを変更する際、他のトランザクションによる変更を防ぐためにロックを適用します。これにより、データ整合性が保証されます。
デッドロックは通常、複数のトランザクションがリソースを競合する場合に発生します。たとえば、トランザクション A がリソース A をロックしてリソース B を変更しようとし、同時にトランザクション B がリソース B をロックしてリソース A を変更しようとする場合です。この循環依存により、各トランザクションが互いのロック解除を待つため、デッドロックが発生します。その後、システムはロールバックコストが最も低いセッション (犠牲セッション) を自動的に終了させ、そのタスクを失敗させます。次の図は、このシナリオを示しています。

デッドロックの種類
[デッドロック] ページには、次の 5 種類のデッドロックの統計が表示されます:
-
KeyDeadlock
-
ObjectDeadlock
-
RIDDeadlock
-
PageDeadlock
-
CompileDeadlock
ロックモード
トランザクションがリソースにアクセスする際、アクセスの種類に応じて異なるロックモード (LockMode) を使用します。これらには以下が含まれます:
-
共有ロック (S):ロックが有効な間、リソースの読み取りは許可されますが、変更は許可されません。
-
更新ロック (U):他のトランザクションがリソースに対して排他ロックを取得するのを防ぎ、リソースを変更する意図を示します。このロックは通常、複数のセッションがリソースを読み取り、ロックし、その後更新しようとするときに発生する可能性のあるデッドロックを回避するために使用されます。
-
排他ロック (X):他のトランザクションがリソースにアクセスするのを防ぎます。
操作手順
DAS コンソールにログインします。
左側のナビゲーションウィンドウで、 をクリックします。
ターゲットインスタンスを見つけ、インスタンス ID をクリックしてインスタンス詳細ページを開きます。
-
左側のナビゲーションウィンドウで、ロックの最適化 > [デッドロック] をクリックします。
-
[デッドロック] ページで、デッドロックの詳細を確認します。
ページの概要
-
[デッドロック数の概要] セクションには、[過去 24 時間]、[過去 7 日間]、[過去 14 日間]、[過去 1 か月] などのプリセットされた期間の統計が表示されます。
-
デッドロックの変化の動向

このチャートには、特定の期間に発生したデッドロックの種類が表示されます。以下の操作を実行できます:
-
開始時刻 と 終了日時 を選択し、検索 をクリックして、指定した期間のデッドロック情報を表示します。
説明期間は 30 日を超えることはできません。
-
過去 1 日、過去 1 週間、または 過去 1 か月 をクリックして、選択した期間のデッドロック情報をすばやくクエリします。
-
トレンドチャート上のポイントにカーソルを合わせると、その時点で発生したデッドロックの種類と数が表示されます。
-
トレンドチャートの右上隅にある
アイコンをクリックして、チャートの表示スタイルを切り替えたり、チャートをダウンロードしたりします。
-
-
デッドロックの詳細情報
レコードの左側にある
アイコンをクリックしてレコードを展開し、相互に依存するセッションの詳細を表示します。詳細には次の情報が含まれます:-
LastTranStarted:トランザクションが開始された時刻。
-
SPID:トランザクションを開始したセッションの ID。
-
IsVictim:セッションがデッドロックの犠牲になったかどうかを示します。
説明SQL Server は、内部スレッドを使用して定期的にデッドロックを検出することで解決します。デッドロックが検出されると、SQL Server は関係するセッションの中でロールバックコストが低い方のセッションを終了させます。たとえば、SELECT 文は通常 UPDATE 文よりもコストが低いため、SQL Server は SELECT 文を実行するセッションを優先的に終了させます。
-
LogUsed:セッションによって生成されたログのサイズ。単位:バイト。
-
LockMode:ロックモード。詳細については、「ロックモード」をご参照ください。
-
WaitResourceDesc:現在のトランザクションが待機しているリソースの説明。
-
ObjectOwned:このセッションによってロックされているオブジェクト。
-
ObjectRequested:セッションがロックしようとしているオブジェクト。
-
WaitResource:トランザクションが待機しているリソース。
-
HostName:トランザクションを開始したクライアントのホスト名。
-
LoginName:トランザクションに使用されたアカウント名。
-
Status:トランザクションの現在のステータス。
-
ClientApp:トランザクションに使用されたクライアントアプリケーションの名前。
-
SQLText:SQL 文の詳細。
説明SQL 文をクリックすると、新しいウィンドウで開きます。[コピー] をクリック をクリックして、トラブルシューティングや分析のために文をコピーします。
いずれかの行をクリックすると、対応するデッドロック図が下に表示されます。
-
-
デッドロック関係図

この図は、デッドロックに関与するセッション間の関係を表示し、ロックされたリソースに関する詳細を提供します。クリックしてダウンロード をクリックして XDL ファイルをダウンロードします。このファイルには、現在のデッドロックの完全な詳細が含まれており、SQL Server Management Studio (SSMS) クライアントで開くことができます。