pgbenchでUNLOGGEDの効果を再確認(接続数=1)
測定環境/方式の変更
前回の検証結果が微妙だったので、永安様のコメント(shared_buffersの増加)と、autovacuum=offの設定を追加して、再度pgbenchの通常テーブル版とUNLOGGEDテーブル版の差異を確認してみた。
shared_buffers | 2GB |
checkpoint_segments | 100 |
autovacuum | off |
また、同時接続数を1に絞って、競合を省いた状態で測定してみる。これが通常/UNLOGGEDテーブルでの基本的な差になるはず。
scale factor | 100 |
connect | 1 |
duration | 600 |
その他 | デフォルト |
測定自体は1回勝負で。
測定結果(tps)
FILLFACTOR設定(100%) | FILLFACTOR設定(80%) | |
通常テーブル版 | 395.016214 | 439.500559 |
UNLOGGED版 | 526.332513 | 585.762816 |
お、なんかそれっぽい結果になっている。
FILLFACTORが100%の場合も80%の場合も、通常テーブル版のtpsをベースにするとUNLOGGED版はだいたい30%程度の向上効果があるという結果になった。
測定結果(latencies)
処理\実行設定 | 通常/FF=100 | 通常/FF=80 | UL/FF=100 | UL/FF=80 |
BEGIN | 0.046743 | 0.044011 | 0.034662 | 0.038746 |
UPDATE accounts | 0.196435 | 0.156118 | 0.468165 | 0.550434 |
SELECT abalance | 0.123869 | 0.110331 | 0.100805 | 0.105568 |
UPDATE tellers | 0.245281 | 0.217802 | 0.241394 | 0.240071 |
UPDATE branches | 0.937295 | 0.494505 | 0.893534 | 0.598381 |
INSERT hinstory | 0.109277 | 0.098475 | 0.087406 | 0.093225 |
END | 0.835786 | 1.121117 | 0.045679 | 0.050481 |
これも予想どおりEND部分について、通常テーブル版とUNLOGGEDテーブル版ではっきりした差が見られる。
- END(COMMIT)の背景でWALをファイルに書き出す処理の差が明確に出た結果になったと思う。
- ただ、UPDATE accountsの処理が何故かUNLOGGEDのほうが時間がかかっている。ここが謎。
あとは、この環境で接続数を増やしてどういった傾向が見られるかを確認すればいいかな。接続数をどのくらい増やすと、WAL書き込み有無による差異がその他の競合により打ち消されていくのだろうか・・・?