16. clustered のコードを読む8 - PostgreSQL のソースコードを読む
Our CLUSTER implementation is pessimal のスレッドに cluster コマンドが遅い理由とパッチが投稿されている。
指摘されている問題点をまとめてみる。
- CLUSTER コマンドの実装は遅い。とても遅い。
- index を full scan して key 順に sort する
- random I/O しまくり
- 同じページを何度も何度も読んでいる
- PostgreSQL の実行計画では、こういうシチュエーションにおいて、うまく heap を sequential スキャンして、そのあと sort している。
- create table as select ... order by の方が速いじゃないか!
- 問題点
- いつ sort し、いつ index を scan するかの情報を utility 関数群は持っていない(つまり cluster コマンドからは参照できない?)
- tuplesort no longer has the pieces needed to sort whole tuples including
visibility info.
-
-
- 知識不足で分からない
- 式 index の存在
-
指摘している事はとてもまとも。このパッチは放置されているみたいだがコードを読む事から得られるものは大きそう。
というわけでそれは次回。