見出し画像

手を動かすPostgreSQL⑤-GUCパラメータ-

前回のあらすじ

前回はoidとファイル名を対応させることでPostgreSQLのファイル構造をなんとなく理解しました。PGDATAには他にも様々なサブディレクトリがありますが、これらを手動で触ることはほぼないので後回しにします。

GUCパラメータとは

GUCパラメータという言葉を何度か見聞きされた方もいらっしゃるかもしれません。これはGrand Unified Configurationパラメータ(大統一設定パラメータ)の略です。GUCがPostgreSQLの動的パラメータを変更するためのモジュールを指すので、要はPostgreSQLの動的パラメータを指している、と考えて良いと思われます。

PostgreSQLの設定パラメータはpostgresql.confに記述することになっており、このパラメータ群を操作することでPostgreSQLの設定を変更することができます。

しかしながら、これらのパラメータはそれぞれ反映のための条件が異なります。日本語マニュアルにも反映条件が書いてあるには書いてあるのですが判然としない場合もあります。
今回はpg_settingsを閲覧してGUCパラメータの設定を確認する方法を理解しましょう。

psqlでpostgresqlに接続して、

\x

を実行します。結構横に長いビューなので、縦にしないと可読性がとんでもなく下がります。

これを実行したら、

ossdb=# SELECT * FROM pg_settings;

を実行します。すると、こんな感じの出力がアルファベット順にいっぱい出てきます。絞り込みたい場合は上記クエリにWHERE句などを追加して絞り込みましょう。
また、列名を絞るのも効果的です。

-[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
name            | allow_in_place_tablespaces
setting         | off
unit            | 
category        | Developer Options
short_desc      | Allows tablespaces directly inside pg_tblspc, for testing.
extra_desc      | 
context         | superuser
vartype         | bool
source          | default
min_val         | 
max_val         | 
enumvals        | 
boot_val        | off
reset_val       | off
sourcefile      | 
sourceline      | 
pending_restart | f

ということで出力の行を見ていきます。

  • name:パラメータ名です。

  • setting:現在の設定値です。

  • category:パラメータの論理グループです。

  • short_desc:パラメータの簡潔な説明です。

  • context:パラメータの変更のために必要な条件が示されています。

パラメータの説明が知りたい場合はshort_descを参照することもできますが、なかなか逆引きも難しいですし普通にマニュアルを見た方がいいかもしれません。categoryについても同じような感じですが、ある程度種類が限定されているため

ossdb=# SELECT * FROM pg_settings WHERE category='Write-Ahead Log / Archiving';

みたいな感じで種類毎にGUCパラメータを概観したい場合に有効かもしれません。でも結局これもマニュアルを見た方が早いんですよね…

で、本題のcontextですが、これは大きく5つの値に分けられます。

  1. internal:設定変更不可

  2. postmaster:postgreSQLの再起動

  3. sighup:マスタプロセスにSIGHUPシグナルを送信する(pg_ctl reload等)

  4. backend:特定のセッション向けに変更できるsighup(セッション開始前に変更しておく必要があり、セッション中の変更はできない)

  5. superuser:スーパーユーザのSETコマンド

  6. user:一般ユーザのSETコマンド

明らかな条件の面倒さからbackendはあんまり見ない印象があります。2-6に関しては下位の条件のパラメータは上位の条件でも変更できます。

例えば、shared_bufferはpostmasterなのでpostgreSQLの再起動以外の条件で変更することは不可能です。

-[ RECORD 1 ]---+-------------------------------------------------------------
name            | shared_buffers
setting         | 16384
unit            | 8kB
category        | Resource Usage / Memory
short_desc      | Sets the number of shared memory buffers used by the server.
extra_desc      | 
context         | postmaster
vartype         | integer
source          | configuration file
min_val         | 16
max_val         | 1073741823
enumvals        | 
boot_val        | 1024
reset_val       | 16384
sourcefile      | /usr/local/var/postgresql@14/postgresql.conf
sourceline      | 127
pending_restart | f

一方、work_memはuserなので2-6の条件いずれでもパラメータを変更することができます。

-[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------------------
name            | work_mem
setting         | 4096
unit            | kB
category        | Resource Usage / Memory
short_desc      | Sets the maximum memory to be used for query workspaces.
extra_desc      | This much memory can be used by each internal sort operation and hash table before switching to temporary disk files.
context         | user
vartype         | integer
source          | default
min_val         | 64
max_val         | 2147483647
enumvals        | 
boot_val        | 4096
reset_val       | 4096
sourcefile      | 
sourceline      | 
pending_restart | f

次の記事では、これらのパラメータを実際に変更してみましょう。


宣伝

OSS-DB Goldの認定教材をリリースしました。
2023年2月時点で唯一のVer.3.0対応の教材です。
受験を検討されている方はぜひご検討の程をお願い致します。


次回の記事はこちら

この記事が気に入ったらサポートをしてみませんか?