Heroku PGSettings
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年04月24日(水)
Heroku Postgres の非レガシーの Standard、Premium、Private、Shield プランでは、pg:settings
コマンドでパラメータを設定することによってデータベース設定を管理できます。
$ heroku pg:settings postgresql-large-1234 -a example-app
=== postgresql-large-1234
log-lock-waits: true
log-min-duration-statement: 2000
log-statement: ddl
track-functions: pl
auto-explain: true
auto-explain.log-analyze: false
auto-explain.log-buffers: false
auto-explain.log-min-duration: 200
auto-explain.log-nested-statements: false
auto-explain.log-triggers: false
auto-explain.log-verbose: false
Essential 層プランには、再構成できないデフォルト設定が含まれています。
log-lock-waits
log-lock-waits
は、セッションがロックを取得するために 1 秒より長い時間待機したときにログメッセージを生成するかどうかを決定します。ロックの待機によりパフォーマンスの問題が発生する可能性があります。Heroku Postgres でのデフォルト値は on
です。
$ heroku pg:settings:log-lock-waits off -a example-app
log-lock-waits has been set to false for postgresql-large-1234.
When a deadlock is detected, no log message will be emitted in your application's logs.
log-min-duration-statement
log-min-duration-statement
では、ステートメントが少なくとも指定された期間 (ミリ秒数単位) 実行された場合は、完了した各ステートメントの期間がログに記録されます。0
の値はすべてをログに記録し、-1
の値はログ記録を無効にします。この設定は、アプリケーション内の最適化されていないクエリを追求するのに役立ちます。Heroku Postgres での log-min-duration-statement のデフォルト値は 2000 ミリ秒 (2 秒) に設定されています。
毎秒数百件のクエリが実行されているシステムでは、ログファイルが急速に増大し、データベースのパフォーマンスが低下する可能性があります。
$ heroku pg:settings:log-min-duration-statement 3000 postgresql-large-1234 -a example-app
log-min-duration-statement has been set to 3000 for postgresql-large-1234.
log-statement
log-statement
は、どの正常な SQL ステートメントをログに記録するかを制御します。この設定は、複雑なクエリをデバッグしたり、アプリまたはあらゆるデータベースユーザーによって作成されたクエリを確認したりするのに役立てることができます。log-statement
の有効な値は次のとおりです。
- none: 正常なクエリのログ記録を停止します。その他のログ (遅いクエリのログ、ロックを待機しているクエリ、構文エラーなど) は引き続き生成されます。
- ddl: すべてのデータ定義ステートメント (
CREATE
、ALTER
、DROP
など) がログに記録されます。 - mod: ddl のすべてのステートメントのほか、
INSERT
、UPDATE
、DELETE
、TRUNCATE
、COPY
などのデータ変更ステートメントが含まれます。 - all: すべてのステートメントがログに記録されます。
Heroku Postgres での log-statement
のデフォルト値は ddl
です。
$ heroku pg:settings:log-statement all postgresql-large-1234 -a example-app
log-statement has been set to all for postgresql-large-1234.
track-functions
track-functions
は、どの関数の実行統計を追跡するかを決定します。これらの統計は pg_stat_user_functions
ビューで確認できます。track-functions
の有効な値は次のとおりです。
- none: 関数の統計を記録しません。この値がデフォルトです。
- pl: 手続き型言語の関数の統計を記録します (例: PL/pgSQL の関数)。
- all: SQL や C 言語の関数を含め、すべての関数の統計を記録します。
$ heroku pg:settings:track-functions pl postgresql-large-1234 -a example-app
track-functions has been set to pl for postgresql-large-1234.
Track only procedural-language functions.
auto-explain
auto_explain
はクエリ実行プランを自動的にログに記録するので、EXPLAIN
を手動で実行する必要はありません。auto-explain
を実行すると、実行速度の遅いクエリの特定に役立ち、データベースのパフォーマンスを最適化する方法の理解に役立つ可能性があります。次のコマンドで auto_explain
を有効にします。
$ heroku pg:settings:auto-explain on -a example-app
auto_explain
を有効にすると、パフォーマンスに影響を及ぼし、ログのボリュームが大幅に増加するため、注意して使用し、データベースのパフォーマンスを監視してください。auto-explain
は、将来のすべての Heroku Postgres 接続に対してモジュールを有効にします。auto_explain
のログ記録が行われる前に、既存の接続を再確立する必要があります。
auto-explain:log_min_duration
log-min-duration
は、最小ログ期間をミリ秒単位で設定します。-1
のログ期間を設定すると、すべてのログ記録が無効になり、0
のログ期間を設定すると、実行されたすべてのクエリが記録されます。デフォルト値は -1
です。
$ heroku pg:settings:auto-explain:log-min-duration 200 -a example-app
auto-explain:log-analyze
log-analyze
は、すべてのクエリについて、それらがログに記録されるかどうかに関係なく、EXPLAIN ANALYZE
を実行します。この設定は、データベースのパフォーマンスに重大な影響を及ぼす可能性があるため、注意して使用してください。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-analyze on -a example-app
auto-explain:log-buffers
log-buffers
は EXPLAIN BUFFERS
の呼び出しと同等で、pg:settings:auto-explain:log-analyze
をオンにした場合にのみ使用できます。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-buffers on -a example-app
auto-explain:log-nested-statements
log-nested-statements
はネストしたステートメントを実行プランのログに追加します。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-nested-statements on -a example-app
auto-explain:log-triggers
log-triggers
は、実行プランのログにトリガー実行の統計を含めます。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-triggers on -a example-app
auto-explain:log-verbose
log-verbose
は実行プランのログに冗長な詳細を含めます。この設定は、EXPLAIN VERBOSE
を実行することと同等です。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-verbose on -a example-app