PC
- Lenovo L380 yoga
- OS: Windows 10 Pro
- バージョン: 2004
- CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz 1.99GHz (4コア8スレッド)
- メモリ: 32GB
PostgreSQLサーバ
- OS: Amazon Linux 2
- CPU: 1つ
- メモリ: 1GB
- PostgreSQLのバージョン: 11.5
pgbenchを実行した環境
PostgreSQLサーバを複製して作成。ネットワーク越しにpgbenchを実行するための環境。
- OS: Amazon Linux 2
- CPU: 1つ
- メモリ: 1GB
- PostgreSQLのバージョン: 11.5
チューニングした内容
PGTuneで生成したものを利用する。
ALTER SYSTEMコマンドのほうを利用する。これを使うと、postgresql.confを編集せずに、postgresql.auto.confが更新され、次回からこれが反映される。しかし、実行しただけでは反映されていないのでPostgreSQLの再起動が必要。
# DB Version: 11 # OS Type: linux # DB Type: web # Total Memory (RAM): 1 GB # CPUs num: 1 # Connections num: 100 # Data Storage: ssd ALTER SYSTEM SET max_connections = '100'; ALTER SYSTEM SET shared_buffers = '256MB'; ALTER SYSTEM SET effective_cache_size = '768MB'; ALTER SYSTEM SET maintenance_work_mem = '64MB'; ALTER SYSTEM SET checkpoint_completion_target = '0.7'; ALTER SYSTEM SET wal_buffers = '7864kB'; ALTER SYSTEM SET default_statistics_target = '100'; ALTER SYSTEM SET random_page_cost = '1.1'; ALTER SYSTEM SET effective_io_concurrency = '200'; ALTER SYSTEM SET work_mem = '1310kB'; ALTER SYSTEM SET min_wal_size = '1GB'; ALTER SYSTEM SET max_wal_size = '4GB';
項目 | チューニング前 | チューニング後 |
---|---|---|
max_connections | 100 | 100 |
shared_buffers | 128MB | 256MB |
effective_cache_size | 4GB | 768MB |
maintenance_work_mem | 64MB | 64MB |
checkpoint_completion_target | 0.5 | 0.7 |
wal_buffers | 4MB | 7864kB |
default_statistics_target | 100 | 100 |
random_page_cost | 4 | 1.1 |
effective_io_concurrency | 1 | 200 |
work_mem | 4MB | 1310kB |
min_wal_size | 80MB | 1GB |
max_wal_size | 1GB | 4GB |
max_worker_processes | 8 | 8 |
max_parallel_workers_per_gather | 2 | 2 |
max_parallel_workers | 8 | 8 |
実行した条件
pgbench -h 192.168.100.2 -p 5432 -U postgres -c 30 -t 1000 -N benchdb
クライアント数を30、トランザクション数を1,000とした。また、実際にWebアプリを想定して頻繁に更新は起きないだろうということで、-Nオプションを追加して実施した。
結果発表!
単位はTPS(including connections establishing)です。
回数 | チューニング前 | チューニング後 |
---|---|---|
1 | 806 | 813 |
2 | 775 | 820 |
3 | 789 | 846 |
4 | 751 | 806 |
5 | 753 | 834 |
平均 | 774 | 823 |
平均すると50TPSくらい性能が向上した。823 / 774 * 100 = 106.33...なので、6.3%くらいの性能向上だった。
考察
一応、チューニングによって性能向上はしたけれど、劇的という感じには思えなかった。やはりCPUコア数やメモリの量を少なくしているのが響いているのか? CPUコア数を増やしたり、メモリ量を調整してまたチャレンジしたい。
あとpgbenchの他のオプションについてイマイチまだ理解できていないので使ってない。PostgreSQLのslackとかで質問してみるかなぁ…。(Slackをあまり使ってないのでなんとなく苦手意識がある)