[pgsql-jp: 41134] Re: ■質問■PostgresSQLのディスク使用量の増える仕組みについて

Hiroki Kataoka kataoka @ interwiz.jp
2012年 6月 14日 (木) 19:22:24 JST


片岡です。

レコードのインサートなどでテーブルを格納するDBファイルのサイズを拡張する必要がある場合には、即座にファイルサイズの拡張だけは行う、ということを聞いたことがあります。この理由は、コミットが成功したにもかかわらず、後のチェックポイント等でDBファイルに書き込む際にディスクフルで失敗することを避けるためです。

2012年6月14日 16:21 S.Watanabe <sywatanabe @ iwass.co.jp>:
> 渡辺と申します。
>
> PostgreSQL(Ver.8.3.1)のDBファイル(base/nnnnn/配下のテーブル等のデータを含む
> ファイル)が
> 何を契機に増えているのか調べています。
>
> 過去メール※は参照しましたが、いまひとつ理解できていません。
>
> 私の理解では、以下のようなものです。
> 1.クライアントからデータ追加要求を受信
> 2.PostgreSQLサーバの共有バッファにデータが追加
> 3.WALログにデータが追加
> 4.以下のいづれかでDBファイルが更新
>  1)CHECKPOINTコマンド実行時
>  2)サーバ停止時(pg_cnt -D DBクラスタパス stop)
>  3)checkpoint_timeoutで指定した時間が経過
>  4)WALログがcheckpoint_segmentsで指定した個数以上に達した時
>
> しかし、int型5つからなるレコードを1レコード追加した時は、
> 上記4.3)でDBファイルが更新されますが、100レコード追加した場合は、
> 即座にDBファイルの更新時刻とサイズが変化していました。
> 更新前後ではWALログは1つしかない状態でした。
> また設定は非同期書込みで、バックグラウンドライタやバキュームは停止させています。
>
> これはどういう要因で更新されているのでしょうか?
> 2.または3.の時点でDBファイルに書込み領域が無い場合は即座に
> DBファイルのサイズを8kbの倍数サイズ増やしてデータが書き込まれるのでしょうか?
> だとすれば、WALログが実際にDBファイルに反映するデータはチェックポイント実行前の
> 8kb未満のデータしかないように思えるのですが。。。
>
>
> 動作させた時の設定は以下の通りです。
> ■設定
>  fsync = off
>  synchronous_commit = off
>  full_page_writes = off
>  checkpoint_segments = 3
>  checkpoint_timeout = 1h
>  checkpoint_completion_target = 0.5
>  bgwriter_lru_maxpages = 0
>  autovacuum = off
>  track_counts = off
>  shared_buffers = 24MB
>
>
> ※[pgsql-jp: 39573] Re: PostgreSQLのディスク使用量が増えるタイミングについて
>
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> Shuichi Watanabe
>
> E-mail : sywatanabe @ iwass.co.jp
>
> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
>
>
>
>
>



-- 
Hiroki Kataoka


pgsql-jp メーリングリストの案内