すべてのプロダクト
Search
ドキュメントセンター

PolarDB:plprofiler プラグインの使用

最終更新日:Sep 01, 2026

plprofiler プラグインを使用して、 または PolarDB for PostgreSQL (Compatible with Oracle) クラスターのパフォーマンス分析を実行できます。

背景情報

PostgreSQL サーバーでプログラミングを行う場合、PL/pgSQL はブラックボックス環境であるため、内部の問題がパフォーマンスボトルネックになることがあります。 一般的な例は次のとおりです。

  • 問題のあるステートメントが、最初は高速に実行されても、複数回呼び出されると低速になります。

  • パフォーマンスボトルネックが不定期に発生します。

  • 本番システムでパフォーマンスの問題が発生します。

通常、前述のパフォーマンスの問題は、手動分析 (スキーマ、統計、SQL ステートメントの分析) またはブレークポイント (pldebugger) によってのみトラブルシューティングできます。 トラブルシューティングは時間がかかり、直感的ではありません。また、パフォーマンスの問題は断続的に発生する可能性があります (前述の最初の問題では、根本原因さえ特定できない場合があります)。 したがって、パフォーマンスボトルネックの特定に役立つ、より優れたトラブルシューティング方法が必要です。

plprofiler は、PL/pgSQL のパフォーマンスデータを収集し、パフォーマンスボトルネックを特定するための簡潔な方法を提供します。これにより、関数、ストアドプロシージャ、スキーマのパフォーマンスを的を絞って最適化できます。 このプラグインの詳細については、plprofiler をご参照ください。

前提条件

説明

以下の操作例は、Linux および macOS にのみ適用されます。

  1. GitHub から plprofiler のソースコードを取得します。

  2. 環境変数をエクスポートします。

    export PGHOST=<polardb_host>
    export PGPORT=<polardb_port>
    export PGUSER=<polardb_user>
    export PGPASSWORD=<polardb_password>
    export PGDATABASE=pgbench_plprofiler
    export PLPROFILER_PATH=<path-to-plprofiler>
    export USE_PGXS=1
    export PATH=<path-to-plprofiler>/bin:$PATH
    説明

    例の接続文字列情報を、実際の接続文字列情報に置き換えてください。 エンドポイントの表示方法については、「エンドポイントの表示または申請」をご参照ください。

  3. ソースコードのディレクトリに移動し、クライアントソフトウェアをインストールします。 操作例は次のとおりです。

    cd $PLPROFILER_PATH/python-plprofiler
    python setup.py install # sudo python setup.py install、または 'pip install plprofiler' を使用します
  4. または PolarDB for PostgreSQL (Compatible with Oracle) データベースにログインし、データベースと拡張機能を作成します。 操作例は次のとおりです。

    > CREATE DATABASE pgbench_plprofiler;
    > \c pgbench_plprofiler
    > CREATE EXTENSION plprofiler;
  5. テスト用のテーブル、データ、関数を準備します。

    cd $PLPROFILER_PATH/examples
    bash prepdb.sh

パフォーマンス分析

  1. plprofiler コマンドを実行して、パフォーマンス分析を行います。 コマンドは次のとおりです。

    plprofiler run --command "SELECT tpcb(1, 2, 3, -42)" --output tpcb-test1.html
    説明

    tpcb-test1.html は、出力されるパフォーマンス分析ページのファイル名です。

  2. コマンドが完了するとエディターが開き、出力 Web ページのタイトル、幅、高さ、説明、その他の情報を編集できます。 何も変更する必要はなく、そのまま終了できます。

    [current]
    title = PL Profiler Report for current
    tabstop = 8
    svg_width = 1200
    table_width = 80%
    desc = <h1>PL Profiler Report for current</h1>
            <p>
            <!-- ここに説明を入力 -->
            </p>
  3. ブラウザーで tpcb-test1.html を開きます。

    フレームグラフから、パフォーマンスに最も影響を与える関数が tpcb_fetch_abalance であることがわかります。 分析の結果、インデックスがないことがパフォーマンス低下の原因であるとわかります。 tpcb_upd_accounts のパフォーマンスも低いですが、この関数は子関数の影響を受けている可能性があります。 まず子関数を最適化してから、パフォーマンスが正常かどうかを確認する必要があります。

  4. インデックスを作成して最適化を行います。 操作例は次のとおりです。

    psql
    > CREATE INDEX pgbench_accounts_aid_idx ON pgbench_accounts (aid);
  5. plprofiler コマンドを再度実行して、パフォーマンス分析を行います。

    フレームグラフから、tpcb_fetch_abalance がもはやパフォーマンスボトルネックではないことがわかります。 tpcb_fetch_abalance が最適化されたため、tpcb_upd_accounts の実行時間も短縮されます。

    結果が期待どおりの場合、最適化は完了です。 結果が期待どおりでない場合は、新しいフレームグラフから引き続きパフォーマンスボトルネックを特定し、最適化できます。