同期スキャンの効果

本家のメーリングリストに、同期スキャンの開発者である Jeff Davis氏自身による同期スキャンの効果を測定したベンチマーク結果が投稿された。ここでは、その結果を引用してみよう。

このテストでは、PostgreSQL 8.2.5と、PostgreSQL 8.3 beta1を比較している。ハードウェアはDual CoreのCore 2 Duoに4GBのメモリを搭載。OSはLinuxで、I/Oスケジューラは"Anticipatory I/O scheduler"に変更されている。テストに使ったテーブルは1億5,000万レコード、サイズは約20GBとのこと。postgresql.confの設定はデフォルトのままだ。

この状態で20セッションが、15秒間隔で次々にテーブルを全件検索すると、8.2.5ではそれぞれのセッションで平均2,119秒かかる。それに対して8.3では平均319秒となり、8.3のほうが6倍以上速かった。同期スキャンの効果が如実に現れた結果である。

同期スキャンにおける注意事項

同期スキャンでは、必ずしもテーブルの先頭から順に読み出しを行うわけではないので、SELECT文が返す行の並びは、物理的な並と一致しないし、またSELECTのたびに変わることがある。SELECTの返却する行の並びが気になる場合は、ORDER BYを使って明示的にソートを行うこと。