pg_stat_statementsで監視する
ベータ版
Lakebase Postgres (オートスケール Beta) は、 Lakebase の次のバージョンであり、評価のみに利用できます。 本番運用ワークロードの場合は、 Lakebase Public Previewを使用します。 どのバージョンが適しているかを判断するには、バージョンの選択を参照してください。
pg_stat_statements は、Lakebase Postgres データベース内での SQL ステートメント実行の詳細な統計ビューを提供する Postgres 拡張機能です。実行回数、合計実行時間、平均実行時間などの情報を追跡し、SQL クエリのパフォーマンスを分析および最適化するのに役立ちます。
pg_stat_statements を使用する場合
必要な場合はpg_stat_statementsを使用してください:
- 詳細なクエリ実行統計とパフォーマンス メトリクス
- 遅いクエリや頻繁に実行されるクエリの識別
- クエリのパフォーマンス分析と最適化に関する知識
- データベースのワークロード分析と容量計画
- カスタムモニタリングツールおよびダッシュボードとの統合
pg_stat_statementsを有効にする
pg_stat_statements拡張機能は Lakebase Postgres で使用できます。有効にするには:
- 
SQL エディターまたは Postgres クライアントを使用してデータベースに接続します。 
- 
拡張機能を作成するには、次の SQL コマンドを実行します。 SQLCREATE EXTENSION IF NOT EXISTS pg_stat_statements;
- 
拡張機能は作成後すぐに統計の収集を開始します。 
データの永続性
pg_stat_statements拡張機能によって収集された統計情報はメモリに保存され、Lakebase コンピュートが一時停止または再起動されると保持されません。 たとえば、非アクティブなためにコンピュートがスケールダウンした場合、既存の統計はすべて失われます。 コンピュートが再起動されると、新しい統計が収集されます。
この動作は次のことを意味します:
- コンピュートの再起動または一時停止後に統計がリセットされる
- 長時間実行されるパフォーマンス分析には、一貫したコンピュートの可用性が必要です
- 計画されたメンテナンスや再起動の前に重要な統計情報をエクスポートする必要がある場合があります
コンピュート ライフサイクル イベント全体にわたる履歴パフォーマンス データが必要な場合は、モニタリング クエリを定期的に実行し、結果を外部に保存することを検討してください。
詳細: Postgres拡張機能
クエリ実行統計
拡張機能を有効にすると、 pg_stat_statementsビューを使用して実行統計を照会できます。このビューには、個別のデータベース クエリごとに 1 行が含まれ、さまざまな統計が表示されます。
SELECT * FROM pg_stat_statements LIMIT 10;
ビューには次のような詳細が含まれます:
| userId | dbid | クエリID | クエリー | 通話 | 
|---|---|---|---|---|
| 16391 | 16384 | -9047282044438606287 | ユーザーから * を選択; | 10 | 
列と説明の完全なリストについては、 PostgreSQL のドキュメントを参照してください。
主要なモニタリングのクエリ
次のクエリを使用して、データベースのパフォーマンスを分析します。
最も遅いクエリを見つける
このクエリは、平均実行時間が最も長いクエリを識別します。これは、最適化が必要な非効率的なクエリを示している可能性があります。
SELECT
    query,
    calls,
    total_exec_time,
    mean_exec_time,
    (total_exec_time / calls) AS avg_time_ms
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;
最も頻繁に実行されるクエリを見つける
最も頻繁に実行されるクエリは、多くの場合、クリティカル パスおよび最適化の候補となります。このクエリには、より適切なインデックス作成によってメリットが得られる可能性があるクエリを識別するのに役立つキャッシュ ヒット率が含まれています。
SELECT
    query,
    calls,
    total_exec_time,
    rows,
    100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;
最もI/Oの高いクエリを見つける
このクエリは、データベース全体のパフォーマンスに影響を与える可能性のある、最も多くのディスク I/O 操作を実行するクエリを識別します。
SELECT
    query,
    calls,
    shared_blks_read + shared_blks_written AS total_io,
    shared_blks_read,
    shared_blks_written
FROM pg_stat_statements
ORDER BY (shared_blks_read + shared_blks_written) DESC
LIMIT 20;
最も時間のかかるクエリを見つける
このクエリは、すべての実行の中で最も長い合計実行時間を消費するクエリを識別します。
SELECT
    query,
    calls,
    total_exec_time,
    mean_exec_time,
    rows
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
多くの行を返すクエリを見つける
このクエリは、ページ区切りやフィルタリングのメリットが得られる可能性のある、大きな結果セットを返すクエリを識別します。
SELECT
    query,
    calls,
    rows,
    (rows / calls) AS avg_rows_per_call
FROM pg_stat_statements
ORDER BY rows DESC
LIMIT 10;
統計をリセット
pg_stat_statementsによって収集された統計をリセットするには:
この機能を実行するために必要な権限を持つのはdatabricks_superuserロールのみです。Lakebase プロジェクトで作成されたデフォルトのロールと Lakebase アプリで作成されたロールには、 databricks_superuserロールのメンバーシップが付与されます。
SELECT pg_stat_statements_reset();
この関数は、SQL ステートメントの実行時間や回数など、蓄積された統計データをすべてクリアし、新しいデータの収集を開始します。パフォーマンス統計の収集を最初からやり直す場合に特に便利です。
リソース
詳細はこちら: PostgreSQLドキュメント