うまいぼうぶろぐ

linuxとhttpdとperlのメモ

postgresがクソ遅い原因

デバッグのためにsql文をログに取ってたのが原因だった。

追記

すごい昔に書いて放置してた記事で今更ですが。。versionにもよるかもしれないけど、8.3で試したところlog_statementをfalseからtrueにしたところで、大してかわらなかった。恐らくそれ以外に致命的にpostgresql.confの設定が悪かっただけぽい。というわけで以下の内容は激しくうさんくさいですが。削除してしまうのもアレなので一応残しておきます。

postgresql.confの設定

log_statement = true

この状態で

[postgres@db1 NewDB]$ time pgbench -c 10 -t 10 hogehoge
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
number of clients: 10
number of transactions per client: 10
number of transactions actually processed: 100/100
tps = 1.931658 (including connections establishing)
tps = 1.999940 (excluding connections establishing)

real    0m52.059s
user    0m0.012s
sys     0m0.032s

おせえええええええええええええ。
なんじゃこりゃ。tps 1ってどないやねん。


これがlog_statementをfalseにしたら、

[postgres@db1 NewDB]$ time pgbench -c 10 -t 10 hogehoge
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
number of clients: 10
number of transactions per client: 10
number of transactions actually processed: 100/100
tps = 57.874423 (including connections establishing)
tps = 111.933324 (excluding connections establishing)

real    0m1.798s
user    0m0.012s
sys     0m0.024s

劇的に変わった。これ以外にもdebug_print_なんとかってのをfalseにしたら、あと数倍tpsが上がった。めでたしめでたし。