質問: Oracle12cの処理速度についてです。 既存のアプリケーションをそのまま使用し、Oracle11gや10gと比較した場合に、処理にもよりますが、5~10倍近く遅くなるようです。 比較条件として、どちらもWindows上で初期値のままインストールした場合(SGAや初期値などおまかせ)です。 処理中のメモリ上のキャッシュの利用や、統計情報の蓄積などでは左右するとは思いますが、サービスの起動直後(および統計情報のクリア)などの条件を合わせるとクエリの応答時間が上記のように5~10倍位かかってしまいます。 一度請負元経由でOracleに問い合わせた時の回答は以下の通りです。 ・Parse Time Elapsedが長い場合の対策 Dynamic Samplingをオフ optimizer_dynamic_sampling=0 Adaptive系(実行時/複数回実行時の最適化)の機能をオフ optimizer_adaptive_features=false 11gでの初期値では約20秒かかった(12cでは100秒かかる) optimizer_dynamic_sampling=2 optimizer_adaptive_features=true から回答を踏まえ optimizer_dynamic_sampling=0 optimizer_adaptive_features=false にした場合は、1割程度遅くなった(100秒→110秒) 他にも色々試したのですが、結局 optimizer_features_enable を 12.1.0.1→11.2.0.1 にするしか手がなさそうでした。 世間にも同様の症例(?)があるようですが、12cで11g並みのレスポンスにするための、手法はご存じないでしょうか。 根本的に、SGAをこうしておきべきだとか、PDBはこうしておくべきだとか、12cはパラメータはこうしておきべきだとか、クエリはこう変えるべきだとか、ヒントをこう指定しておかないと、だとか。突っ込んだ内容や手法でも結構ですのでお願いします。 クリップはいただけてるのですが、なかなか回答がないもので、同様に、どの位遅くなったとか、とりあえずこう回避してるとか、11gに固執せざるを得ないとか、そういう談義でも結構です。
回答: 11gから12cに移行した経験はないですが、現在12cを使用したシステムを構築しています。 fullスキャンに傾く傾向にあったため、下記パラメータを調整してindex使用のコストを安く見積もるようにしました。ADAPTIVEも安定しないという話を聞いているのでFALSEにしています。 OPTIMIZER_INDEX_CACHING OPTIMIZER_INDEX_COST_ADJ 細かく原因の切り分けをするのであれば、GATHER_PLAN_STATISTICSヒント句を使用して、11gと12cで同条件、同一SQLで下記の差異を見ることをおすすめします。 ・実行計画の内容 ・cost ・E-Lows(オプティマイザが想定する行数) ・A-Lows(実際に取得した行数) ・A-Time(実際にどこで時間がかかっているか) サンプルはできれば複数SQLあった方がより傾向は浮き彫りになるのでベターでしょう。 オプティマイザがどのように考えて実行計画を立てたのか、実際のデータ構成と見積りのギャップが理由で遅くなったのかが見えてくると思います。そこから次の手を検討してみてはいかがでしょうか。