catch-img

OPTIMIZER COST BASED TRANSFORMATION - 日本エクセム株式会社 Oracleパラメータ


目次[非表示]

  1. 1.基本情報
    1. 1.1.Parameter情報
    2. 1.2.説明
  2. 2.注意
    1. 2.1.実行計画以上のCost Based Transformation
    2. 2.2.10053 TraceとCost Based Transformation
  3. 3.関連情報

基本情報

Parameter情報

Syntax:_OPTIMIZER_COST_BASED_TRANSFORMATION = ON|LINEAR|OFF
設定方法:・Parameter File
     ・ALTER SYSTEM SET “_OPTIMIZER_COST_BASED_TRANSFORMATION” = ON
     ・ALTER SESSION SET “_OPTIMIZER_COST_BASED_TRANSFORMATION” = ON
バージョンとデフォルト
9iR2 : -
10gR1: ON
10gR2: ON	
11g  : ON


説明

 Subquery UnnestingやView MergingなどのQuery TransformationをCost basedで行うかどうかを指定します。Cost Based Query Transformationは10gで導入された概念で、既定値は常にTrueです。Oracle9iまではOracleは、可能な、常にQuery Transformationを試みます。しかし、10gからコスト(Cost)を考慮して、Subquery UnnestingとView Mergingが費用を減らすのに役立つ場合にのみ実行します。


注意

実行計画以上のCost Based Transformation

 9iのバージョンで正常にSubquery UnnestingやView Mergingが行われるクエリが10gでは、変換が発生しないことがあります。統計情報が正確であれば、Oracleのほとんどの場合、最適の判断をするが、時折、特定のクエリの場合には、変換が行われないことにより、非効率的な実行計画に変わることがあります。このような場合には、_OPTIMIZER_COST_BASED_TRANSFORMATIONパラメータの値をOFFに変更したり、OPT_PARAMヒントを利用して、そのパラメータをStatementレベルで変更する必要があります。

alter session set_optimizer_cost_based_transformation= off;

 - あるいは

select/*+ opt_param('_ optimizer_cost_based_transformation'、 'off')*/...


10053 TraceとCost Based Transformation

 10gR2から10053 TraceにQuery Transformation過程が詳細に記録されます。したがってCost Base Transformation過程も10053 Traceを利用してTroubleshootingが可能となりました。10053 Trace FileでのQuery Transformationデバッグの例は、以下の通りです。

SELECT /*+ */ "T3"."C1" "C1","T4"."C2" "C2",COUNT(*) "CNT" FROM "UKJA"."T3" "T3",
"UKJA"."T4" "T4" WHERE "T3"."C1"="T4"."C1" GROUP BY "T3"."C1","T4"."C2"
Query block (04C7F7C8) unchanged
CVM:     CVM bypassed: Outer QB referencing ROWNUM

SELECT /*+ */ "T2"."C1" "C1","X"."C2" "C2","X"."CNT" "CNT",ROWNUM "R" FROM "UKJA"."T2" "T2", 
(SELECT /*+ */ "T3"."C1" "C1","T4"."C2" "C2",COUNT(*) "CNT" FROM "UKJA"."T3" "T3",
"UKJA"."T4" "T4" WHERE "T3"."C1"="T4"."C1" GROUP BY "T3"."C1","T4"."C2") "X" 
WHERE "T2"."C1"="X"."C1"
Query block (04C7FE60) unchanged
CVM:     CVM bypassed: ROWNUM column

PM: Considering predicate move-around in SEL$1 (#1).
PM:   Checking validity of predicate move-around in SEL$1 (#1).
PM:     PM bypassed: Reference to ROWNUM.
PM:   Passed validity checks.

 上記の例では、ROWNUMによってCVM(Complex View Merging)とPM(Predicate Move-Around)が行われ、このていないことを知ることができます。


関連情報

1.MERGEヒント
2.NO_UNNESTヒント
3.NO_MERGEヒント
4.NO_QUERY_TRANSFORMATIONヒント
5.UNNESTヒント
6._OPTIMIZER_PUSH_PRED_COST_BASEDパラメータ


CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧