Heroku PGSettings
最終更新日 2025年02月18日(火)
Table of Contents
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-min-error-statement: error
log-statement: ddl
track-functions: pl
pg-replication-slot-logs: off
auto-explain: true
auto-explain.log-analyze: false
auto-explain.log-buffers: false
auto-explain.log-format: text
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 postgresql-large-1234 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 postgresql-large-1234 3000 -a example-app
log-min-duration-statement has been set to 3000 for postgresql-large-1234.
log-min-error-statement
log_min_error_statement
は、指定された重大度レベルでエラーを引き起こす SQL ステートメントのログ記録を制御します。この設定を使用して、機密情報を含む SQL クエリのログ記録を防止します。log_min_error_statement
の有効な値は次のとおりです。
error
log
fatal
panic
デフォルト値は error
です。
panic
エラーのみが SQL ステートメントをログに記録します。
$ heroku pg:settings:log-min-error-statement postgresql-large-1234 panic -a example-app
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 postgresql-large-1234 all -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 言語の関数を含むすべての関数の統計を記録します。
このデフォルト値は none
です。
$ heroku pg:settings:track-functions postgresql-large-1234 pl -a example-app
track-functions has been set to pl for postgresql-large-1234.
Track only procedural-language functions.
pg-replication-slot-logs
pg-replication-slot-logs
は、データベースのレプリケーションスロットの統計情報を表示します。メトリクスのリストについては、「Heroku Postgres のメトリクスのログ」を参照してください。デフォルト値は off
です。
$ heroku pg:settings:pg-replication-slot-logs postgresql-large-1234 on -a example-app
auto-explain
auto_explain
はクエリ実行プランを自動的にログに記録するので、EXPLAIN
を手動で実行する必要はありません。auto-explain
を実行すると、実行速度の遅いクエリの特定に役立ち、データベースのパフォーマンスを最適化する方法の理解に役立つ可能性があります。次のコマンドで auto_explain
を有効にします。
$ heroku pg:settings:auto-explain postgresql-large-1234 on -a example-app
auto_explain
を有効にすると、パフォーマンスに影響を及ぼし、ログのボリュームが大幅に増加するため、注意して使用し、データベースのパフォーマンスを監視してください。auto-explain
は、将来のすべての Heroku Postgres 接続に対してモジュールを有効にします。auto_explain
のログ記録が行われる前に、既存の接続を再確立する必要があります。
auto-explain:log-analyze
log-analyze
は、すべてのクエリについて、それらがログに記録されるかどうかに関係なく、EXPLAIN ANALYZE
を実行します。この設定は、データベースのパフォーマンスに重大な影響を及ぼす可能性があるため、注意して使用してください。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-analyze postgresql-large-1234 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 postgresql-large-1234 on -a example-app
auto-explain:log-format
log-format
は、EXPLAIN
コマンドの形式を設定します。デフォルト値は text
です。log-format
の形式オプションは次のとおりです。
text
xml
json
yaml
$ heroku pg:settings:auto-explain:log-format postgresql-large-1234 json -a example-app
auto-explain:log-min-duration
log-min-duration
は、最小ログ期間をミリ秒単位で設定します。-1
のログ期間を設定すると、すべてのログ記録が無効になり、0
のログ期間を設定すると、実行されたすべてのクエリが記録されます。デフォルト値は -1
です。
$ heroku pg:settings:auto-explain:log-min-duration postgresql-large-1234 200 -a example-app
auto-explain:log-nested-statements
log-nested-statements
はネストしたステートメントを実行プランのログに追加します。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-nested-statements postgresql-large-1234 on -a example-app
auto-explain:log-triggers
log-triggers
は、実行プランのログにトリガー実行の統計を含めます。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-triggers postgresql-large-1234 on -a example-app
auto-explain:log-verbose
log-verbose
は実行プランのログに冗長な詳細を含めます。この設定は、EXPLAIN VERBOSE
を実行することと同等です。デフォルト値は off
です。
$ heroku pg:settings:auto-explain:log-verbose postgresql-large-1234 on -a example-app