SQLの実行計画をDB側・DBA側で固定すべきか

ここでは、ORACLEのSQLの実行計画をDB側・DBA側で固定すべきかについて、少し触れたいと思います。

正直、私は基本的には反対派です。

ただし、暫定的な対処や緊急対処では、アリだと思います。
即時性が求められる場面やすぐに対応できない場合には、非常にお手軽で有効だと思います。

しかし、恒久的には、やはりSQLを修正することやアプリケーションの変更をしておくべきだと思います。

というのも、理由はいくつかあります。

SQLが変更されると無効になる

DB側でSQLの実行計画を固定したところで、SQLに修正が加わると、別のSQLとして認識されてしまい、実行計画が固定されなくなります。

つまり、アプリ側でSQL修正してしまうと、無効になってしまいます。これって結構やりがちです。これが原因でまた遅くなるなんてこともあるので、恒久的にはきちんとSQLないしはアプリを修正した方が良いと思います。

環境に依存する

実行計画の固定は、環境ごとに設定が必要です。

例えば、本番環境で性能の悪いSQLに対し、実行計画を固定したとします。

その処理を検証環境で実行した場合、実行計画を固定していないので性能が遅くなります。
性能検証などをやっている最中だと、正しく性能が図れません。またユーザテストなど実施中であれば、ユーザにどういう前提でのレスポンスを確認してもらっているのか、定かではなくなります。

さいごに

DB側、DBA側でSQLの実行計画を固定するのは、比較的難しくないのですが、その後、どうしても忘れがちになります。
というか、実行計画を固定しただけで恒久対応を完了にするケースもあります。

私は出来れば、恒久対応はSQLやアプリをきちんと修正しておいた方が色々と都合が良いと思います。

>>SELECT文のSQLチューニング方法まとめ

Oracle SQLチューニング パフォーマンス改善と事前対策に役立つ (DB selection) [ 加藤祥平 ]

価格:2,808円
(2018/11/19 19:23時点)