« 小技:行に連番を付与する | トップページ | 宗教論争になりやすいテーマ »

2015.02.17

PostgreSQLでのhint

以前ちょっと触れたけどもPostgreSQLではOracleで言うところのHINT句は利用できない。
これはもうPostgreSQLコミュニティとしてのコンセプト部分であり、将来的にも公式にもサポートされないであろう。
→ref)[OptimizerHintsDiscussion](英文)(*)

だが、それでもあちこちから「ヒント使いてー」という声を聞かされる(^^;
ではまるっきり芽がないのか、というと実はヒントを使える拡張モジュールというのは存在している。

pg_hint_planである。
モジュールはSource Forgeで提供されている。[PostgreSQL で ヒント句を使う]
PostgreSQL9.1以上なら対象なのかな。Windows版は対応していないのでUNIX/Linux系でのみ動作する。
ビルド(make → make install)した後に、CREATE EXTENSION文で利用したいデータベースにpg_hint_planエクステンションを登録することで使用が可能になる。

書式はOracleのヒントとよく似ていて

/*+
でヒントのブロックを開始し、
IndexScan(i1) --i1のインデックスを使用する
MergeJoin(a b) --a,bテーブルをMerge Joinする
といった形になる。

個人的には基本はオプティマイザに任せるべき、という意見に賛成。
ただ実システム運用時には最後の切り札&一時しのぎ的に欲しくなる気持ちも良くわかる。
一時しのぎでつないぎつつ、ヒントを使わない恒久対策を検討する、というのが実務者としては適切な姿じゃないかなあ、と思う。



ところで先に掲示したWikiでの意見を要約すれば
「テスト用途とかで1回こっきりなら走査プランを自分で作ってもいいかもしれないけど(Benefit)、保守性は低下するしデータが突然大きくなったりしたり、バージョンアップしたときでもその計画が有効かは誰も保証できないんだから(Problems)、”だって他の処理系にはあるじゃん”みたいな意見には共感できないネ」
というところである。

何で読んだのかな? 『実行計画をコンピュータよりも速く適切にたてることは人間にはできない。Tom Lane(PostgreSQLのコミッタの一人。オプティマイザ周りも担当する)でもない限り』みたいな警句があったなあ(笑)

PostgreSQL |

« 小技:行に連番を付与する | トップページ | 宗教論争になりやすいテーマ »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/61113380

この記事へのトラックバック一覧です: PostgreSQLでのhint:

« 小技:行に連番を付与する | トップページ | 宗教論争になりやすいテーマ »