[pgsql-jp: 29540] WALファイル数の最大数は?
Yoshinari Takaoka
yoshinari.takaoka @ jse.jp
2003年 4月 1日 (火) 17:59:34 JST
こんにちは。高岡と申します。
WALに使われるディスク容量を推定したいと思い、いろいろと
調べておりましたところ、PostgreSQL7.2.3管理者ガイド(http://www.postgresql.jp/document/pg721doc/admin/wal
-configuration.html)に以下のような記述を見つけました。
--------以下管理者ガイドの引用です--------------
16M バイトのセグメントファイル数は、常に少なくとも WAL_FILES
+ 1 あり、通常は WAL_FILES + MAX(WAL_FILES
、CHECKPOINT_SEGMENTS) + 1 を越えません。WAL で必要とする領
域の推定に、これを使用することができます。普通、古いセグメント
ファイルが不要になった時、それらは再利用(将来順番に使われるセ
グメントとなるように名前が変更)されます。短時間のログ出力のピ
ークのためにセグメントファイル数が WAL_FILES + MAX(WAL_FILE
S, CHECKPOINT_SEGMENTS) + 1 を越えた場合、システムがこの上限
以下になるまで、不要になったセグメントファイルを再利用するので
はなく、削除します。(通常状態でもこれが発生するようであれば、
防止するために WAL_FILES を増やさなければなりません。後で再度
作成する必要があるログセグメントの削除はもったいなく、意味があ
りません。)
---------------引用終了------------------------
上記からすると、WAL_FILES及び、CHECKPOINT_SEGMENTSの値を
postgresql.confで設定すれば、WALファイルの最大数を制御でき
そうだなと考えました.
そこで、postgresql.confのWALの部分を以下のように設定しました。
#
# Write-ahead log (WAL)
#
wal_files = 1 # range 0-64
#wal_sync_method = fsync # the default varies across platforms:
# # fsync, fdatasync, open_sync, or open_datasync
#wal_debug = 0 # range 0-16
#commit_delay = 0 # range 0-100000
#commit_siblings = 5 # range 1-1000
checkpoint_segments = 1 # in logfile segments (16MB each), min 1
#checkpoint_timeout = 300 # in seconds, range 30-3600
#fsync = true
その後、postmasterを再起動して30万件のレコードを\copyコマンド
であるテーブルに流したところ、pg_xlogにはWALファイルが10個
(サイズは1個につき16MB)できてしまいました。上記の設定だと、
10個もできるようには見えません.
おそらく私がとんでもない勘違いをしているのだと思いますが、
・pg_xlogにできるWALのサイズ数の最大は何によって決まるのか
・上記のようにファイルが10個できてしまったのは何故なのか
をご教授いただけると幸いです.
以上、宜しくお願い致します.
pgsql-jp メーリングリストの案内