More Related Content
Similar to MySQLメインの人がPostgreSQLのベンチマークをしてみた話 (20)
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
- 6. • PostgreSQL 9.5.0
• File System
• ext4(nobarrier,discard)
• ベンチマークソフト
• LinkBench
• https://github.com/mdcallag/linkbench
- 10. ベンチマーク環境
• HP DL360 G8v2
• Intel Xeon E5-2643 v2 3.50GHz x 2 (2P12C24T)
• MEM 8GB x 8 = 64GB
• ioDrive2 785G (Driver version: 3.2.6)
• NIC Intel I350
• CentOS 6.6(2.6.32-504.12.2.el6.x86_64)
- 11. postgresql.conf
• shared_buffers = 16GB
• work_mem = 16MB
• bgwriter_delay = 10ms
• wal_level = archive
• wal_sync_method = open_datasync
• wal_buffers = 32MB
• wal_max_size = 16GB
- 12. • checkpoint_timeout = 60min
• checkpoint_completion_target = 0.9
• archive_mode = on
• archive_command = 'test ! -f
/var/lib/pgsql/linkdb/archivedir/%f && pigz <
%p > /var/lib/pgsql/linkdb/archivedir/%f’
• effective_cache_size = 4GB
• log_checkpoints = on
• autovaccum = off
- 14. 初期から変更した設定1
• max_wal_sizeの変更(1GB -> 16GB)
• HINT: Consider increasing the configuration parameter
“max_wal_size”.
• 8GBも試したが今回の環境では1割ちょっと16GBの方が
高スコア
• archive_commandの圧縮をgzipからpigzへ変更
• pg_xlog以下が40GB超えたりしたので
- 15. 初期から変更した設定2
• shared_buffers (40GB -> 16GB)
• データ量に対してshared_buffersが十分に大きいと
background writer(bgwriter)が仕事をしないため
• LinkBenchのようにI/O負荷が高いベンチマークでは
チェックポイントの際の書き込み負荷が高く、
bgwriterにより少しずつで良いから吐き出してもらう
ため
- 20. • 以下設定でもデフォルトと比較するとマシ
• vm.dirty_ratio = 3
• vm.dirty_background_ratio = 1
• いくらbgwriterが頑張ってもメモリのダーティペー
ジ(/proc/meminfoのDirty)を吐き出す処理が重い
• ダーティページのメモリに対する割合を小さくし
、積極的に書き出させることで瞬間的な書き込み
量を削減(SSDに優しく無い)
- 21. • dstat --top-io --top-bioで以下のようにダーティペ
ージの書き出しががっつり来てる事が確認できま
す
• postgres: a 112M 47M|flush-252:0 0 509M
• PostgreSQLのSlackでKernel 3.2以降だと
I/O less dirty throttlingが使えるとのことなので環
境違いますがCentOS7.2で同じベンチマークを実
施
- 22. ベンチマーク環境2
• 自作サーバ
• Intel Xeon E5-2630 2.30GHz x 2 (2P12C24T)
• MEM 8GB x 8 = 64GB
• Intel SSD 910 Series 400GB (200GB x 2, RAID0(md0), ext4)
• NIC Intel I350
• CentOS 7.2