[pgsql-jp: 29555] WALファイル数の最大数は?

Yoshinari Takaoka yoshinari.takaoka @ jse.jp
2003年 4月 2日 (水) 10:24:16 JST


こんにちは。高岡と申します。

※昨日同内容のものをPostしたのですが、届いていないよう
ですので、再度投稿させていただきます。

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 メーリングリストの案内