イベント契約
クエリが期待するフィールド
| フィールド | 種類 | なぜ存在するのか |
|---|---|---|
| timestamp_utc | Timestamp | UTC での端末トランザクション時間。 |
| transaction_id | Utf8 | アプリケーションによって生成される 1 つの論理トランザクションの識別子。 |
| service | Utf8 | トランザクションを所有するアプリケーションまたはワーカー。 |
| database_name | Utf8 | 承認された論理データベース名。 |
| status | Utf8 | コミット済み、または rolled_back。 |
| error_type | Utf8 | デッドロックや serialization_failure などの制御されたロールバック カテゴリ。 |
| duration_ms | Float64 | エンドツーエンドの論理トランザクション期間。 |
| account_id | Utf8 | 影響分析に使用される承認済みの顧客またはテナントの識別子。 |
| environment | Utf8 | 導入環境。 |
クエリをコピーする
SELECT
service,
database_name,
COUNT(*) AS transactions,
SUM(CASE WHEN status = 'rolled_back' THEN 1 ELSE 0 END) AS rollbacks,
100.0 * SUM(CASE WHEN status = 'rolled_back' THEN 1 ELSE 0 END)
/ NULLIF(COUNT(*), 0) AS rollback_rate_pct,
COUNT(DISTINCT CASE
WHEN status = 'rolled_back' THEN account_id
ELSE NULL
END) AS affected_accounts,
AVG(duration_ms) AS average_duration_ms
FROM database_transaction_events
WHERE timestamp_utc >= now() - INTERVAL '7 days'
AND environment = 'production'
GROUP BY service, database_name
HAVING COUNT(*) >= 10
ORDER BY rollback_rate_pct DESC, transactions DESC;この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。
クエリ結果
サービス別のトランザクションのロールバック率
Checkout はロールバック率が最も高く、影響を受けるアカウント数も最も多くなります。
| service | database_name | transactions | rollbacks | rollback_rate_pct | affected_accounts | average_duration_ms |
|---|---|---|---|---|---|---|
| checkout-api | app_production | 12 | 3 | 25 | 3 | 290 |
| billing-worker | billing_production | 12 | 1 | 8.33 | 1 | 275 |
| catalog-api | catalog_production | 12 | 0 | 0 | 0 | 107.5 |
合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。
例を再現する
パブリックフィクスチャをダウンロードする
JSON バンドルには、型付きイベント コントラクトが含まれています。 reproducible 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。
SQL の仕組み
- 1分子は、すべての再試行ではなく、端末のロールバックされたトランザクションをカウントします。
- 2影響を受けるアカウントは、トランザクションの分母を変更せずに顧客コンテキストを追加します。
- 3制御された error_type は、予想されるシリアル化の再試行とアプリケーションの欠陥を区別するために、個別に検査する必要があります。
決定すべきエッジケース
- 1 つの論理操作で複数のトランザクションが再試行される場合があります。最終的なユーザー結果も必要な場合は、ワークフロー ID を保持してください。
- 読み取り専用トランザクションには異なるベースラインがある可能性があるため、関連する場合はセグメント化する必要があります。
- ステートメントのパラメーター、接続文字列、または無制限のエラー メッセージをログに記録しません。
推奨されるダッシュボード
- バー: rollback_rate_pct (サービス別)
- 積み上げ傾向: 時間の経過に伴うコミットとロールバック
- 表: リリース別のロールバック error_type と影響を受けるアカウント数
レシピを活用する
関連する機器とガイド
分析を続ける
遅いデータベース クエリをフィンガープリントで検出する
生の SQL やパラメーターを保存せずに、正規化されたデータベース操作を低速クエリ レート、平均継続時間、観測された最悪の継続時間によってランク付けします。
レシピを開くデータベース接続プールの飽和状態を測定する
平均プール使用率、キューに入れられた取得待機、タイムアウト、およびアプリケーション サービスごとのアイドル容量を測定します。
レシピを開くデータベースのロック待機とデッドロックの検索
インシデント数、待機期間、未解決のロック、検出されたデッドロックに基づいて、ブロックされたデータベース操作のフィンガープリントをランク付けします。
レシピを開く実際のイベントで実行する
テーブルを作成し、フィールドを調整して、結果を保存します
無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。