Oracle(へたれな)コネタ バインド・ピーク機能

恥ずかしながら、バインド・ピーク機能って知りませんでした。というか意識した事が無かったのですが、パフォーマンスチューニングをいろいろ調べているとこの機能にぶちあたりました。似たような構文のSQLが実行されるときに、それらの差分であるリテラル値部分を変数的に内部に取り扱い効率的にSQLを実行するといった仕組みの物であるそうです。素直に考えるとこの機能によって、類似にSQLが多く実行される場合パフォーマンスは向上します。しかし、これらはOracle内部で自動的に行われるので、同じく内部で自動的に判定される実行計画によるオプティマイズと合わせ技で、本来もっと高速化されるはずが、逆の結果となってしまう場合があるようです。どうも、コストベースのオプティマイザは好きになれません。変動するデータ量に対する最適解である事は理解できるのですが、オプティマイズ結果が常に正しいと言い切れないように思います。結局、人間の判断によるヒント句により調整必要となってしまうんですよね。統計情報取得した結果で実行計画も変化するので、運用段階のデータベースでは致命的なパフォーマンスダウンにつながる恐れがあります。
参考
バインド・ピーク機能の落とし穴
実行計画のTIPS データベースコンサルタントのノウハウちょい見せ