NRDOT Collectorは、幅広いPostgreSQLメトリクスを報告します。New Relicは、デフォルトメトリクスのメトリクスを自動的に収集します。パフォーマンスと健全性に関するより深いインサイトを得るには、追加メトリクスに記載されているメトリクスのいずれかを有効にしてください。
ヒント
各メトリクスは、特定のデータベース、テーブル、スキーマ、またはインデックスにスコープされます。このコンテキストは、メトリクス属性としてではなく、リソースに設定されます。
これらのメトリクスは自動的に収集され、標準のダッシュボードを含むNew Relic UIにデータを提供します。
メトリック | 説明 | ユニット | タイプ | 属性 |
|---|---|---|---|---|
| バックエンド接続数 |
| sum(cumulative、int) | — |
| 割り当てられたバッファ数 |
| sum(cumulative、int、monotonic) | — |
| 書き込まれたバッファ数 |
| sum(cumulative、int、monotonic) |
(backend、backend_fsync、checkpoints、bgwriter) |
| 実行されたチェックポイント数 |
| sum(cumulative、int、monotonic) |
(requested、scheduled) |
| チェックポイントによるディスクへのファイルの書き込みと同期に費やされた合計時間 |
| sum(cumulative、double、monotonic) |
(sync、write) |
| バックグラウンドライターがすでに多くのバッファを書き込んでいたためにクリーニングスキャンを停止した回数 |
| sum(cumulative、int、monotonic) | — |
| ブロック読み取り回数 |
| sum(cumulative、int、monotonic) |
|
| コミット数 |
| sum(cumulative、int、monotonic) | — |
| クライアント接続の最大許容数 |
| ゲージ(int) | — |
| ユーザーデータベース数 |
| sum(cumulative、int、non-monotonic) | — |
| データベースのディスク使用量 |
| sum(cumulative、int、non-monotonic) | — |
| テーブルでのインデックススキャン数 |
| sum(cumulative、int、monotonic) | — |
| ディスク上のインデックスのサイズ |
| ゲージ(int) | — |
| データベース行操作数 |
| sum(cumulative、int、monotonic) |
(ins、upd、del、hot_upd) |
| レプリケーションで遅延したデータ量 |
| ゲージ(int) |
|
| ロールバック数 |
| sum(cumulative、int、monotonic) | — |
| データベース内の行数 |
| sum(cumulative、int、non-monotonic) |
(dead、live) |
| データベース内のユーザーテーブルの数 |
| sum(cumulative、int、non-monotonic) | — |
| テーブルが使用するディスク領域 |
| sum(cumulative、int、non-monotonic) | — |
| テーブルが手動でバキュームされた回数 |
| sum(cumulative、int、monotonic) | — |
| 最も古いWALファイルの経過時間。少なくとも1つのレプリカでWALが有効になっている必要があります |
| ゲージ(int) | — |
| 最近のWALをローカルにフラッシュしてから、スタンバイが操作を完了したという通知を受け取るまでの時間。WAL+少なくとも1つのレプリカが必要 |
| ゲージ(int) |
(flush、replay、write)、
|
追加のメトリクス
以下のメトリクスはデフォルトで無効になっていますが、有効にすることでPostgreSQLのパフォーマンスと健全性に関するより深いインサイトを得ることができます。これらのメトリクスは機能ごとに整理されています。
標準のPostgreSQLエンティティダッシュボードでは、明示的に有効にする必要がある以下の追加メトリクスを使用します:
メトリック | 説明 | ユニット | ダッシュボードウィジェット | 追加要件 |
|---|---|---|---|---|
| データベースロックの数 |
| モード/タイプ別のデータベースロック | — |
| デッドロックの数 |
| デッドロック | — |
| 関数への呼び出し回数 |
| 関数呼び出し/分 | 〜で
が必要です
|
| リカバリの競合によりクエリがキャンセルされました。スタンバイのみ;プライマリではゼロ |
| クエリの競合 | — |
| シーケンシャルスキャンの数 |
| シーケンシャルスキャン/分 | — |
| クエリによって一時ファイルに書き込まれた合計データ |
| 一時ファイル & 一時I/O(MB/分) | — |
| 一時ファイルの数 |
| 一時ファイル & 一時I/O(MB/分) | — |
ダッシュボードで使用されない追加のデータベースアクティビティメトリクス:
メトリック | 説明 | ユニット | 属性 |
|---|---|---|---|
| すでにバッファキャッシュで見つかったディスクブロック |
| — |
| このデータベースで読み取られたディスクブロック数 |
| — |
| データベース内のクエリによって取得された行 |
| — |
| データベース内のクエリによって返された行 |
| — |
| データベース内のクエリによって挿入された行 |
| — |
| データベース内のクエリによって更新された行 |
| — |
| データベース内のクエリによって削除された行 |
| — |
| データベースについて
によって追跡されたSQLステートメントの合計実行時間 |
| — |
メトリック | 説明 | ユニット | 属性 |
|---|---|---|---|
|
機能ゲートで制御される、
の正確な代替 |
|
,
|
ベクトル類似度検索のメトリクスには、PostgreSQL 13以降とpg_stat_statementsおよびpgvector拡張機能が必要です:
メトリック | 説明 | ユニット | 属性 |
|---|---|---|---|
| ベクトル類似度検索の実行、距離関数でグループ化 |
|
|
| ベクトル検索の累積実行時間 |
|
|
| ベクトル検索によって返された累積行数 |
|
|
| pgvectorテーブルに挿入されたベクトル |
| — |
| pgvectorインサートの累積実行時間 |
| — |
イベント検索
以下のイベントはデフォルトで無効になっていますが、有効にすることでクエリレベルのテレメトリーデータを収集できます。
現在実行中のデータベースステートメントのリアルタイムの可視性 — 完全な実行ログではなく、スクレイプごとに取得されるポイントインタイムのスナップショット。このイベントはデフォルトで無効になっており、監視ユーザーがpg_monitorを保持している必要があります。
属性 | 説明 |
|---|---|
| データベースの名称。これは常に
|
| SQLステートメントのテキスト |
/
| APM相関コメントタグ。詳細については、 を参照してください。 |
| クロスエンジン相関のための正規化されたSQLのMD5 |
| このバックエンドにログインしているユーザー |
| バックエンドの現在の全体的な状態 |
| このバックエンドのプロセスID |
| バックエンド/接続が開始されたUTC(RFC3339)タイムスタンプ。クエリごとに変化する
とは異なり、接続の存続期間中は安定しています |
| バックエンド起動からの経過秒数(整数)。
が利用できない場合は
|
| 接続されているアプリケーションの名前 |
/
| クライアントIPアドレス/TCPポート |
| クライアントの逆引きDNSホスト名 |
| 現在アクティブな(または最後の)クエリが開始された日時 |
/
| バックエンドが現在待機中の場合は、待機イベント名/カテゴリ |
| このバックエンドの最新クエリの識別子 |
| デルタミリ秒単位のクエリ所要時間 |
| このセッションをブロックしているPIDの配列。ブロックされていない場合は空 |
| 現在のロック待機が開始された際のUTCタイムスタンプ。ブロックされていない場合は空 |
| ロックを待機した秒数(整数)。ブロックされていない場合は
|
/
/
| 待機中のロックモード/リソースタイプ/リレーション名。ブロックされていない場合は空 |
| 現在のトランザクションが開始されたときのUTCタイムスタンプ。アクティブなトランザクションがない場合は空 |
pg_stat_statementsからの正規化されたクエリごとの集計実行統計。前回の収集サイクル以降の増分(デルタ)値として報告されます。このイベントはデフォルトで無効になっており、スキャンされるすべてのデータベースでpg_stat_statements拡張機能が必要です。
属性 | 説明 |
|---|---|
| データベースの名称。これは常に
|
| SQLステートメントのテキスト(正規化済み、
/
プレースホルダー) |
/
|
と同じです。 注: 最初 に実行した呼び出し元を反映します —
はクエリ構造のみから
をハッシュし、最初の実行時に保存されたテキスト(コメントを含む)をフリーズします |
| クロスエンジン相関のための正規化されたSQLのMD5 |
/
| 実行回数/取得・影響を受けた行数、デルタ値 |
/
/
/
| 共有ブロックアクティビティ、デルタ値 |
/
| 一時ブロックアクティビティ、デルタ値 |
| 同一の正規化されたクエリを識別するハッシュ |
| クエリを実行したロール |
/
| 合計実行/計画時間、デルタミリ秒 |
| 取得可能な場合は、ステートメントのEXPLAINプラン — 以下のEXPLAINのメカニズムを参照してください |
実行プラン収集(EXPLAIN)のメカニズム
- レート制限:
top_query_collection.max_explain_each_interval(デフォルトは1000)は、スクレイプごとのEXPLAINを制限します。 - キャッシュ:
query_plan_cache_size/query_plan_cache_ttl(デフォルト1000エントリ/1時間)は、一度取得したプランをクエリIDをキーとしてキャッシュします。 - PostgreSQL 12以降の要件: パラメーター化されたクエリのEXPLAINには、
PREPARE/EXPLAIN EXECUTEの前にplan_cache_mode = force_generic_planが必要です — PostgreSQL 12以降でのみ利用可能です。古いサーバーでは、レシーバーがバージョンを検出し、失敗するSETを送信するのではなく、そのクエリのEXPLAINをスキップします。 - 権限の境界:デフォルトでは、EXPLAINは監視ユーザーとして直接実行され、Postgresは計画時にテーブル権限を確認します — そのため、監視ユーザーが決して持つべきではない書き込みアクセス権が付与されていない限り、行ロックや書き込みステートメントは
permission deniedで失敗します。書き込みアクセス権を付与せずにこれを回避するには、explain_function_nameを使用してください(EXPLAIN計画の権限を参照)。 - 何らかの理由でプランを取得できない場合、その行の
postgresql.query_planは単に空になります — エラーは表示されません。