本文へ移動
Telemetry
SQL レシピ集

データベースの信頼性 SQL レシピ

低速クエリのフィンガープリント、接続プールのプレッシャー、トランザクションのロールバック、ロック競合、レプリケーションの遅延、安全なアプリケーションとデータベースに隣接するイベントからの移行の結果を分析します。

コモンイベント契約書

これらのクエリを再利用可能に保つフィールド

  • timestamp_utc、サービス、database_name、環境、リリース
  • query_fingerprint、transaction_id、pool_name、consumer_name、および migration_id
  • duration_ms、wait_ms、lag_seconds、ステータス、error_type、および容量フィールド

SQL より前の定義

クエリでは決定できないこと

  1. 1生の SQL とパラメーターを保存するのではなく、収集前にクエリ操作を正規化します。
  2. 2個別のクライアント プール待機、データベース実行、ロック待機、およびダウンストリーム レプリケーション遅延。
  3. 3データベースの症状をアプリケーション サービス、リリース、およびユーザーに表示されるワークフローに結び付けます。

推奨される順序

最初にビルド検出、次に診断

分析パターン

結果で決定を説明する

クライアント境界を計測する

安全な操作のフィンガープリント、サービス、最終ステータス、およびアプリケーションがデータベースの結果を受け取るフェーズの期間を記録します。

圧力と衝撃を組み合わせる

呼び出し元が待機、タイムアウト、ロールバック、またはユーザーに表示されるワークフローに失敗した場合、プールがいっぱいになった場合や一時ロックが実行可能になります。

ロールアウト コンテキストを保持する

リリース、移行、レプリカ、およびリージョンのフィールドを保持して、回帰をそれを引き起こしたデプロイメント境界に分離できるようにします。

完全なレシピ

クエリをコピーし、仮定を検証します

初心者database_query_events

遅いデータベース クエリをフィンガープリントで検出する

生の SQL やパラメーターを保存せずに、正規化されたデータベース操作を低速クエリ レート、平均継続時間、観測された最悪の継続時間によってランク付けします。

調査するには十分なほど常に遅いデータベース操作はどれですか?

SQL と結果を参照してください。
初心者database_pool_samples

データベース接続プールの飽和状態を測定する

平均プール使用率、キューに入れられた取得待機、タイムアウト、およびアプリケーション サービスごとのアイドル容量を測定します。

どのアプリケーション プールが呼び出し元にデータベース接続を待たせていますか?

SQL と結果を参照してください。
中級者database_transaction_events

データベーストランザクションのロールバック率の計算

エラー カテゴリ、期間、影響を受けるアカウントを維持しながら、コミットされたトランザクションとロールバックされたトランザクションをサービスごとに比較します。

異常な割合のデータベース トランザクションをロールバックするサービスはどれですか?

SQL と結果を参照してください。
中級者database_lock_wait_events

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

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

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

SQL と結果を参照してください。
初心者database_replication_samples

データベースのレプリケーションと CDC ラグを測定する

レプリカと変更データ キャプチャ コンシューマを、平均ラグ、最悪のラグ、遅れているバイト数、および古いサンプル レートによって比較します。

どのレプリカまたは CDC コンシューマーがソース データベースに遅れをとっていますか?

SQL と結果を参照してください。
初心者database_migration_events

データベース移行の失敗をリリースごとに追跡する

ロールアウトを完了する前に、アプリケーションのリリースごとにデータベースの移行の成功、失敗、ロールバック、期間を比較します。

失敗したデータベース移行またはロールバックされたデータベース移行はどのリリースに含まれていますか?

SQL と結果を参照してください。
中級者database_request_query_events

N+1 データベースクエリパターンの検出

1 つのアプリケーション リクエスト内で何度も繰り返されるデータベース フィンガープリントを検出します。

リクエスト内で疑わしい繰り返しが行われるルートとクエリの組み合わせはどれですか?

SQL と結果を参照してください。
初心者database_query_events

データベースクエリを合計時間の影響でランク付けする

コール量と待ち時間を組み合わせて、アプリケーション時間を最も多く消費しているデータベース フィンガープリントを見つけます。

どのデータベース操作が最も累積リクエスト時間を消費しますか?

SQL と結果を参照してください。
中級者database_transaction_events

長時間実行されるデータベース トランザクションの測定

ロングテール、ロールバック、過度のオープン期間を持つアプリケーション トランザクション クラスを見つけます。

どのアプリケーション トランザクション クラスが最も長く開いたままになりますか?

SQL と結果を参照してください。
初心者database_error_events

SQLSTATEとリリースによるデータベースエラーの分析

データベースの障害をポータブル SQLSTATE クラス、アプリケーション操作、リリースごとにグループ化します。

アプリケーションのリリース後に増加したデータベース エラー クラスはどれですか?

SQL と結果を参照してください。
中級者database_connection_events

データベース接続のタイムアウトとチャーンを測定する

接続のオープン、クローズ、取得タイムアウト、影響を受けるリクエストをサービスおよびリージョンごとに比較します。

どのサービスとリージョンが異常なデータベース接続のチャーンを示していますか?

SQL と結果を参照してください。
上級者向けdatabase_replica_read_events

リージョンごとにデータベース レプリカの古さを測定する

アプリケーションで観察されたレプリカのリプレイ ラグ、古い読み取り、フェイルオーバーの結果をリージョンごとに比較します。

どのレプリカ リージョンが古い読み取りまたは失敗した読み取りを処理していますか?

SQL と結果を参照してください。

しきい値の前にイベント コントラクトを適応させる

分析パターンを維持しますが、テーブル名、フィールド タイプ、ビジネス定義、時間枠、および最小ボリューム ルールを独自のイベントに対して検証します。パブリッシュされたすべてのクエリも計画され、ピン留めされたエンジンを使用して空の型付きテーブルに対して実行されます。