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 の存在

指摘している事はとてもまとも。このパッチは放置されているみたいだがコードを読む事から得られるものは大きそう。
というわけでそれは次回。