ロックツリー
ロックツリー画面では、ロック(Lock)によって互いに待機しているセッションをツリー形式で確認できます。どのセッションがリソースを保持しており(holder)、どのセッションがそれを待っているか(waiter)を親子関係で表示するため、デッドロックの原因となるセッションを素早く見つけるのに役立ちます。
ロックとロックツリー
簡単に言うと、ロックは同じデータを同時に変更できないようにかける施錠装置です。あるセッションがデータ を修正している間、他のセッションは待たなければなりません。待機するセッションが増えて互いに絡み合うと、デッドロックになります。ロックツリーはこの待機関係を木の形に展開し、一番上でリソースを保持しているセッション(原因)を見つけられるようにします。
基本画面の案内
画面上部でインスタンスとデータベースを選択します。まずLock Wait Sessionsチャートでロック待機が発生した時点を選択すると、その時点のLock TreeとTotal Locksを確認できます。数分以上持続したロックを示してくれるため、長く拘束されているロックを素早く見つけられます。
| 領域 | 説明 |
|---|---|
| Lock Wait Sessions | 時間帯別のロック待機セッション数チャート。照会する時点を選択 |
| Lock Tree | 選択時点のロック待機関係をツリーで表示 |
| Total Locks | 選択時点の全ロック数 |
カラム案内
リソースを保持しているセッション(holder)と待機しているセッション(waiter)を、次のカラムで表示します。
| Column | Description |
|---|---|
instance | セッションが実行中のノード |
node_id | ノード識別子 |
session_id | セッションID |
db | 使用中のデータベース |
user | 接続ユーザー |
tx_state | トランザクション状態 |
lock_type | ロックタイプ |
row_locks | 行ロック数 |
partition_locks | パーティションロック数 |
activity | 作業名 |
raw_task | 実行中のSQL原文 |
sql_param | SQLパラメーター |
command | 実行中のコマンドの種類 |
elapsed_time_ms | 実行時間(ミリ秒) |
ここで混同しやすいのはセッションの識別方法です。MySQLはセッションID1つで識別しますが、SingleStoreは分散環境のため、ノード識別子とセッションIDを合わせて(node_id + session_id)マッチングキーとして使用します。同じセッションIDでもノードが異なれば別のセッションだからです。row_locks・partition_locksは、分散環境でロックが行単位かパーティション単位かを区別してくれます。
ロックの解消
原因セッション(holder)を確認した後、必要に応じてそのセッションを停止できます。セッションの停止方法はセッション履歴とインスタンスモニタリングのドキュメントを参照してください。
AIで分析する
画面でWhaTap AIボタンをクリックすると、WhaTap AIチャットウィンドウが開き、照会した画面データを要約して分析した結果が対話形式で表示されます。結果を読んだ後、同じ対話で続けて質問できます。
-
分析に使用するデータは照会範囲全体の推移、30分区間の集計、選択時点のロックツリースナップショットの3つです。
-
分析対象は画面に照会されたデータです。照会条件を変更してから再度分析すると、変更後のデータを基準に分析します。
-
対話履歴には
AI分析 - {画面名}形式で記録されます。