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

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

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

初心者database_query_eventsレビュー済み 2026-07-28テスト済み アパッチ DataFusion 45.2.0

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

質問に回答しました

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

生の SQL には、多くの場合、識別子、値、および無制限のバリエーションが含まれます。制御されたクエリ フィンガープリントは同等の操作をまとめて保持するため、テレメトリをクエリ テキスト アーカイブにせずに、低速のクエリ レートでも繰り返しのアプリケーション パスを特定できます。

イベント契約

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

フィールド種類なぜ存在するのか
timestamp_utcTimestampデータベース操作が完了したとき (UTC)。
query_fingerprintUtf8パラメーター値を持たない、正規化された制限された操作ラベル。
serviceUtf8オペレーションを発行したアプリケーションまたはワーカー。
database_nameUtf8承認された論理データベース名。
statusUtf8成功か失敗か。
duration_msFloat64エンドツーエンドのデータベース操作時間 (ミリ秒単位)。
rows_returnedInt64クライアントがカウントを公開するときに返される行、または影響を受ける行。
releaseUtf8クエリを発行したアプリケーションのリリース。
environmentUtf8導入環境。
DataFusion SQL

クエリをコピーする

sql
SELECT
  query_fingerprint,
  service,
  database_name,
  COUNT(*) AS executions,
  SUM(CASE WHEN duration_ms >= 1000 THEN 1 ELSE 0 END) AS slow_executions,
  100.0 * SUM(CASE WHEN duration_ms >= 1000 THEN 1 ELSE 0 END)
    / NULLIF(COUNT(*), 0) AS slow_query_rate_pct,
  AVG(duration_ms) AS average_duration_ms,
  MAX(duration_ms) AS maximum_duration_ms
FROM database_query_events
WHERE timestamp_utc >= now() - INTERVAL '30 days'
  AND environment = 'production'
GROUP BY query_fingerprint, service, database_name
HAVING COUNT(*) >= 10
ORDER BY slow_query_rate_pct DESC, executions DESC
LIMIT 20;

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

クエリ結果

フィンガープリントによる遅いクエリ速度

請求書の更新はほとんどの実行で遅くなりますが、カタログ クエリは例示的な 1 秒のしきい値を下回ったままです。

query_fingerprintservicedatabase_nameexecutionsslow_executionsslow_query_rate_pctaverage_duration_msmaximum_duration_ms
UPDATE invoices SET status = ?billing-workerapp_production108801,2501,700
SELECT checkout WITH line_itemscheckout-apiapp_production126501,012.51,600
SELECT products BY categorycatalog-apicatalog_production1200330440

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

Slow-query rate by fingerprint: Find Slow Database Queries by Fingerprint 結果例からの合成 slow_query_rate_pct 値の静的チャート
決定論的な出力例のインデックス可能な SVG。記事、ランブック、または出典を明示した設計レビューのためにダウンロードしてください。

例を再現する

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

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

SQL の仕組み

  1. 1フィンガープリントは、生の SQL ではなく、アプリケーションによって制御されるラベルです。これによりカーディナリティが制限され、パラメーター値のキャプチャが回避されます。
  2. 2レートは、時折低速になる大容量の操作と、ほとんどの場合低速になる操作を区別します。
  3. 3最小実行数により、単一のコールド クエリがランキングを独占することがなくなります。

決定すべきエッジケース

  • ワークロードごとに遅いしきい値を選択します。 1 秒は例示的なものであり、対話型リクエストには長すぎる可能性があります。
  • クライアントの継続時間には、これらのフェーズが個別に記録されない限り、プールの待機時間とネットワーク時間が含まれます。
  • 未加工のクエリ パラメーター、接続文字列、または無制限の SQL テキストをログに記録しないでください。

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

  • バー: slow_query_rate_pct by query_fingerprint
  • トレンド: リリース別 average_duration_ms
  • 表: 選択したフィンガープリントとサービスの最新の障害

アラートガイダンス

大量のフィンガープリントが、いくつかの完全なバケットに対してレビューされた低速クエリ レートを超えたままになっている場合にアラートを送信します。

アラート設定を読む

レシピを活用する

関連する機器とガイド

ソースデータを定義する

この分析のイベント スキーマ

分析を続ける

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

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

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

API キーを取得する