checkpoint_segmentsのチューニングでPostgresのパフォーマンスが10倍以上に

Postgresのログに下記のようにcheckpoint_segmentsに関するものが出ていたので checkpoint_segmentsの値をデフォルトの3から64に増やしたところ
データベースへの書き込みが含まれるベンチマークでは10倍以上のパフォーマンスアップが確認できました。
書き込みの発生しないselect文のみのベンチマークでは変わりはありませんでした。これはメモリに全部乗っかっている為だと思われます。
更新が多く、I/Owaitが発生するような環境では、checkpoint_segmentsの値を増やしてやると劇的にパフォーマンスが改善する事が期待できるかと思います。

[2015-07-17 16:17:33 JST][1991][][] LOG:  checkpoints are occurring too frequently (27 seconds apart)
[2015-07-17 16:17:33 JST][1991][][] HINT:  Consider increasing the configuration parameter “checkpoint_segments”.
環境
OS:Centos6.4
PostgreSQL9.1.18
CPU:Intel Xeon E5-2609V3 1.9G(6Core)
memory:32GB

試験方法
pgbench用に1000万件のレコードを作成して初期化
createdb test
pgbench -i -s100 test   -s100が1000万件指定

同時接続10且つ1000トランザクションで試験。各5回計測
$ pgbench -c 10 -t 1000 test

TPS リソース状態
1 2 3 4 5 avg CPU I/O wait %util
(shared_buffers = 8GB) checkpoint_segments = 3 (default) 220 208 234 220 218 220 1% 30%前後 100%
(shared_buffers = 2GB) checkpoint_segments = 64 3685 3749 3751 3734 3786 3741 18% 1%前後 40%
(shared_buffers = 8GB) checkpoint_segments = 64 3647 3661 3712 3754 3726 3700 30% 1%前後 38%

 

selectのみ実行した場合(同時接続数100且つ10000トランザクションで試験)
$ pgbench -c 100 -t 10000 -S test

TPS リソース状態
1 2 3 4 5 avg CPU I/O wait %util
(shared_buffers = 8GB) checkpoint_segments = 3 (default) 39094 38450 38649 38492 38633 38664 75% 5%前後 0.1%
(shared_buffers = 2GB) checkpoint_segments = 64 38544 38580 38847 38601 38172 38549 75% 0%前後 0.1%
(shared_buffers = 8GB) checkpoint_segments = 64 39111 38698 38136 38704 38612 38652 75% 0%前後 0.1%
Comments are closed.