patorashのブログ

方向性はまだない

pgbenchでチューニング前後でベンチマークを取ってみた

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サーバ

Hyper-VVM上に構築した。

pgbenchを実行した環境

PostgreSQLサーバを複製して作成。ネットワーク越しにpgbenchを実行するための環境。

チューニングした内容

PGTuneで生成したものを利用する。

pgtune.leopard.in.ua

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をあまり使ってないのでなんとなく苦手意識がある)