プランナ設定

postgresql8.4.0でのお話。


そこそこの件数(数百万件)のデータをいろいろ結合、集計して持ってくるようなクエリを書いたのだが、
大体数秒〜数十秒で帰ってくるがたまに数分帰ってこないものがある。


実行計画などを見てみると、nestedloopを使うようになってしまうものもあるので、
set enable_nestloop = off
すると無事にhash joinとなり期待するレスポンスとなった。


また、あるクエリについてはプランナがmergejoinを選択した際に、
ERROR: inner pathkeys do not match mergeclause
こんなエラーがはかれてしまう。
これも
set enable_mergejoin = off
で解決。
気持ち悪いけどこれでとりあえずは動いてる。