はじめに
にゃーん
この記事は、PostgreSQL 10全部ぬこ Advent Calendar 2017 の8日目のエントリです。
PostgreSQLパラメータの差分をとってみる
毎回、新バージョンのベータ版がでそうな時期に、PostgreSQLパラメータの調査をするんだけど、そのときに前バージョンとの比較も実施する。
比較方法として最初に思いつくのはSHOW ALL
で、前バージョンと新バージョンの出力結果をとって、その差分を見るというものだが、意外とこの方法は面倒くさい。
というのは、SHOW ALL
では、name(パラメータ名)、setting(設定値)、description(説明)を表示するのだが、パラメータ名や設定値に変更がなくとも、説明の変更が入ることがあり、それが差分として出力されてしまう。また、説明の変更により1行の最大長が変わると、diffとるときに全体に影響が出かねない。面倒な。
なので、自分で差分を調査する場合には、psqlをつかって、以下のような手順でpg_settingsカタログを直接SELECTで参照することが多い。
- 前バージョン、新バージョンそれぞれinitdbしておき、パラメータを変更せずに起動する。
- portの差分はでるが、それは既知のことなので差分としては無視できる。
- psql上で差分をとる
- psqlに特権ユーザでログインする
- \a メタコマンドでnoalign設定にする。
- \o filename で出力結果をファイルに出力する。
-
SELECT name, setting, source, enumbals FROM pg_settings ORDER BY name
を実行する。
- 前バージョン・新バージョン上で差分を取得し、diff等で差分をとってみる。
この方式だとdescriptionの差分は対象にならない。今回は追加されたパラメータ名や、設定値のデフォルトを対象に差分を見ていく。
PostgreSQL 9.6とPostgreSQL 10のパラメータ差分
パラメータ名 | 区分 | 変更内容 |
---|---|---|
enable_gathermerge | パラメータ追加 | パラレルクエリ関連のパラメータ |
hot_standby | デフォルト値変更 | off -> on |
log_directory | デフォルト値変更 | 'pg_log' -> 'log' |
log_line_prefix | デフォルト値変更 | '' -> '%m [%p] ' |
max_logical_replication_workers | パラメータ追加 | デフォルト値は4 |
max_parallel_workers | パラメータ追加 | デフォルト値は8 |
max_parallel_workers_per_gather | デフォルト値変更 | 0 -> 2 |
max_pred_locks_per_page | パラメータ追加 | |
max_pred_locks_per_relation | パラメータ追加 | |
max_replication_slots | デフォル値値変更 | 0 -> 10 |
max_sync_workers_per_subscription | パラメータ追加 | |
max_wal_senders | デフォルト値変更 | 0 -> 10 |
max_wal_size | デフォルト値変更 | 64 -> 1024 |
min_parallel_relation_size | パラメータ削除 | min_parallel_index_scan_sizeとmin_parallel_table_scan_sizeに分離 |
min_parallel_index_scan_size | パラメータ追加 | |
min_parallel_table_scan_size | パラメータ追加 | |
min_wal_size | デフォルト値変更 | 5 -> 80 |
password_encryption | デフォルト値変更 | on -> md5, 型もbooleanからenumに変更されている |
sql_inheritance | パラメータ削除 | |
ssl_dh_params_file | パラメータ追加 | |
wal_consistency_checking | パラメータ追加 | |
wal_level | デフォルト値変更 | minimal -> replica |
今回も新規機能の追加によって増えたパラメータや、パラメータの細分化により削除&追加されたものもあるが、デフォルト値変更も結構多い。
特徴としては、
- パラレルクエリ
- ストリーミングレプリケーション
に関するパラメータのデフォルト値が変更され、デフォルトのままでも上記の高度な機能を利用可能にしていることが挙げられる。
おわりに
今日はちょい手抜きです。たまにはそんな日があってもいいよね?
参考:該当するリリースノート
本エントリに関連するPostgreSQL 10リリースノートの記載です。
E.2.2. Migration to Version 10
- Increase the size of the default DH parameters used for OpenSSL ephemeral DH ciphers to 2048 bits (Heikki Linnakangas)
- Remove sql_inheritance server parameter (Robert Haas)
E.2.3.1.1. Parallel Queries
- Add max_parallel_workers server parameter to limit the number of worker processes that can be used for query parallelism
E.2.3.1.3. Locking
- Allow tuning of predicate lock promotion thresholds (Dagfinn Ilmari Mannsåker)
E.2.3.1.9.1. Write-Ahead Log (WAL)
- Add wal_consistency_checking server parameter to add details to WAL that can be sanity-checked on the standby (Kuntal Ghosh, Robert Haas)
E.2.3.2. Replication and Recovery
- Reduce configuration changes necessary to perform streaming backup and replication (Magnus Hagander, Dang Minh Huong)