存储大纲(STORED OUTLINE)和 SQL PLAN BASELINE不支持并行(parallel)的控制

    技术2022-05-20  57

          最近希望通过稳定执行计划来达到改变一个SQL的执行计划从并行执行到正常执行,用STORED OUTLINE和SQL PLAN BASELINE实验了好多遍,始终不能达到目的,最后发现无论是STORED OUTLINE还是SQL PLAN BASELINE对于并行都不能控制,是否并行完全由优化器决定。做个记录,欢迎大家参考验证。

          一.STORED OUTLINE修改执行计划(增加提示hint )

     

             创建原有sql的outline

             创建仅添加HINT后的SQL的OUTLINE

             UPDATE OUTLN.OL$ SET HINT_COUNT=XX WHERE OL_NAME='ORIGINAL_OL'

             UPDAET OUTLN.OL$HINTS SET OL_NAME=DECODE(OL_NAME,'ORIGINAL_OL','NEW_OL',,'NEW_OL','ORIGINAL_OL')

     

           二.SQL BASELINE修改执行计划(增加提示hint )

              假设数据库SHARED POOL中已经有两个版本的执行计划

                         1。创建旧执行计划的SQL PLAN BASELINE

                         DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id => 'old_sql_id',plan_hash_value=>'xxxx');

                         2。加载新的执行计划,这里需要用第一步生成的SQL_HANDLE标示这个计划适用于旧的SQL DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id => 'new_sql_id', plan_hash_value=>'xxxx' sql_handle=>'第一步生成的SQL BASELINE对应的SQL_HANDLE'); 3。使用DBMS_SPM.DROP_SQL_PLAN_BASELINE删除掉多余的BASELINE

    最新回复(0)