本文へ移動
Telemetry
データベースの信頼性 SQL レシピ

データベースのロック待機とデッドロックの検索

インシデント数、待機期間、未解決のロック、検出されたデッドロックに基づいて、ブロックされたデータベース操作のフィンガープリントをランク付けします。

中級者database_lock_wait_eventsレビュー済み 2026-07-28テスト済み アパッチ DataFusion 45.2.0

レビュー者 Telemetry 製品チーム . SQL の互換性、イベント コントラクト、合成出力、および操作上の注意事項. 基準と所有権を確認する

質問に回答しました

最も深刻なロック競合を引き起こすデータベース操作はどれですか?

ロック競合は、ブロックされたアプリケーション操作が安定したブロッカー フィンガープリント、待機期間、解決結果に関連付けられている場合に対処可能になります。

イベント契約

クエリが期待するフィールド

フィールド種類なぜ存在するのか
timestamp_utcTimestampロック待ちが観察されたとき。
database_nameUtf8承認された論理データベース名。
blocked_query_fingerprintUtf8ブロックされたアプリケーション操作の正規化されたラベル。
blocking_query_fingerprintUtf8ロックを保持する操作の正規化されたラベル。
lock_typeUtf8制御されたロックのカテゴリ。
wait_msFloat64ミリ秒単位で観測されたロック待機。
resolvedBoolean待機がブロックされたままにならずに終了したかどうか。
deadlock_detectedBooleanデータベースがデッドロックの結果を報告したかどうか。
transaction_idUtf8アプリケーションセーフなトランザクション識別子。
environmentUtf8導入環境。
DataFusion SQL

クエリをコピーする

sql
SELECT
  database_name,
  blocked_query_fingerprint,
  blocking_query_fingerprint,
  COUNT(*) AS lock_wait_incidents,
  COUNT(DISTINCT transaction_id) AS affected_transactions,
  AVG(wait_ms) AS average_wait_ms,
  MAX(wait_ms) AS maximum_wait_ms,
  SUM(CASE WHEN NOT resolved THEN 1 ELSE 0 END) AS unresolved_incidents,
  SUM(CASE WHEN deadlock_detected THEN 1 ELSE 0 END) AS deadlocks
FROM database_lock_wait_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
  AND environment = 'production'
GROUP BY
  database_name,
  blocked_query_fingerprint,
  blocking_query_fingerprint
HAVING COUNT(*) >= 3
ORDER BY deadlocks DESC, maximum_wait_ms DESC;

この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。

クエリ結果

ブロックされた操作による最大ロック待機時間

注文の更新には、待ち時間の延長、未解決のインシデント、検出されたデッドロックが表示されます。

database_nameblocked_query_fingerprintblocking_query_fingerprintlock_wait_incidentsaffected_transactionsaverage_wait_msmaximum_wait_msunresolved_incidentsdeadlocks
app_productionUPDATE orders SET status = ?SELECT order FOR UPDATE881,6003,20022
analytics_productionREFRESH customer_summaryINSERT customer_event6650070000

合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。

Maximum lock wait by blocked operation: Find Database Lock Waits and Deadlocks 結果例からの合成 maximum_wait_ms 値の静的チャート
決定論的な出力例のインデックス可能な SVG。記事、ランブック、または出典を明示した設計レビューのためにダウンロードしてください。

例を再現する

パブリックフィクスチャをダウンロードする

JSON バンドルには、型付きイベント コントラクトが含まれています。 reproducible 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。

SQL の仕組み

  1. 1ブロックされたフィンガープリントとブロッキング フィンガープリントにより、パラメーター化された SQL を収集せずに競合関係が表示されたままになります。
  2. 2個別のトランザクション数により、同じ待機の繰り返しサンプルから結果が保護されます。
  3. 3デッドロックや未解決のインシデントは、単に高い平均待ち時間よりも優先されます。

決定すべきエッジケース

  • ポーリングでは、1 つのインシデントに対して複数の観測値を出力できます。トランザクションまたはインシデントの識別子を保存します。
  • データベース ロック ビューでは、機密性の高いステートメント テキストが公開される可能性があります。イベントを発行する前に収集時に正規化します。
  • 予想されるメンテナンス ロックには、セグメント化できるように承認されたワークロード カテゴリが含まれている必要があります。

推奨されるダッシュボード

  • バー: maximum_wait_ms by blocked_query_fingerprint
  • 表: ブロッカーとブロックされた指紋のペア
  • 統計: 未解決のインシデントとデッドロック

アラートガイダンス

ユーザーに表示されるワークフローに影響を与えるデッドロックまたは継続的な未解決の競合のみをページングします。ルート維持の競合は別途発生します。

アラート設定を読む

レシピを活用する

関連する機器とガイド

分析を続ける

実際のイベントで実行する

テーブルを作成し、フィールドを調整して、結果を保存します

無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。

API キーを取得する