26.Oracle深度学习笔记——SQL基线

26.Oracle深度学习笔记——SQL基线

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50830903

1.  SQL计划基线

     SQL计划基线可以理解是存储提纲的一个改进版本,不仅和存储提纲有许多相同的特性,而且也和存储提纲一样被设计用来提供稳定的执行计划,以防执行环境和对象统计信息的改变对执行计划产生影响。此外,和存储提纲类似,也可以在不修改语句的情况下调优应用程序。

维持执行计划的稳定性是SQL计划基线唯一被提及的用途.

    SQL计划基线是一个与SQL语句相关联的对象,它被设计用来影响查询优化器产生执行计划时的决定。具体地讲,SQL计划基线主要是一个提示的集合。基本上,SQL计划基线就是用来迫使查询优化器为一条给定的SQL语句产生个特定的、稳定的执行计划。

    有多种方法可用来捕获SQL计划基线。基本上,它们都是由数据库引擎自动创建或数据库管理员手动创建。

2.  基线自动捕获

       当动态初始化参数optimizer_use_sql_plan_baselines设置为true的时候,查询优化器将自动创建一个新的SQL计划基线。这个初始化参数被默认设置为FALSE,可以在系统级和会话级修改它。当自动捕获开启后,查询优化器为每条重复执行过(就是至少执行过两次)的SQL 语句存储一个新的SQL 计划基线。为此.它会将每条SQL 语句的签名插入一个日志中,以便于管理。

    这意味着当一条SQL语句第一次执行的时候,仅把它的签名插入日志。然后,当第二次执行相同的语句的时候,如果不存在与此语句相对应的SQL计划基线,就新建一个并存储起来。如果与SQL语句相对应的SQL计划基线已经存在,查询优化器仍然会对比当前的执行计划和基于此SQL计划基线的执行计划。如果它们不匹配,那么这个描述当前执行计划的新的SQL计划基线将被存储。然而就像你在前面见到的,不能直接使用当前的执行计划。查询优化器被强制使用在SQL 计划基线的辅助下产生的执行计划。

计划基线用来指导优化器始终选择某一个执行计划。通过计划基线,可以将执行计划存储在数据库的表中并进行管理。计划基线由一个或多个已经被接受到的SQL查询执行计划组成。运行一个查询,且该查询已经存在计划基线,优化器就会优先考虑计划基线中的执行计划。

3.  测试

用SQL_ID创建基线

tpcc@TOADDB> create table t as select * fromall_objects;

Table created.
tpcc@TOADDB>create index t_idx on t(object_name);

Index created.

收集统计信息:

tpcc@TOADDB> execdbms_stats.gather_table_stats(user,'t',cascade=>true);

PL/SQL procedure successfully completed.

tpcc@TOADDB> select/*test_01*/object_id,object_type from t where object_name ='DUAL';

 OBJECT_ID OBJECT_TYPE

---------- -----------------------

      142 TABLE

      143 SYNONYM

查找所执行SQL的ID

tpcc@TOADDB> select sql_id,sql_text from v$sqlwhere sql_text like 'select /*test_01*/%';

SQL_ID

-------------

SQL_TEXT

----------------------------------------------------------------------------------------------------

farns9fxz7dum

select /*test_01*/object_id,object_typefrom t where object_name ='DUAL'

SQL计划基线的管理,需要拥有administersql management object权限。

查看已有基线:

SQL>select sql_handle,plan_name fromdba_sql_plan_baselines where sql_text like 'select /*test_01*/%';

no rows selected

使用dbms_spm.load_plans_from_cursor_cache加载sql_id对应的SQL的执行计划。

declare

      x pls_integer;

   begin

      x := dbms_spm.load_plans_from_cursor_cache(sql_id => 'farns9fxz7dum');

   end;

  /

再查看创建的基线如下:

tpcc@TOADDB> select sql_handle,plan_name fromdba_sql_plan_baselines where sql_text like 'select /*test_01*/%';

SQL_HANDLE

----------------------------------------------------------------------------------------------------

PLAN_NAME

----------------------------------------------------------------------------------------------------

SQL_718c094fd7a20a4d

SQL_PLAN_733099zbu42kda0b930be

如此就为需要创建计划基线的SQL创建了计划基线

用sql文本来创建计划基线

如下

tpcc@TOADDB>select object_id from t whereobject_name = 'DUAL';

 OBJECT_ID

----------

      142

      143

declare

       xpls_integer;

    begin

       x :=dbms_spm.load_plans_from_cursor_cache(

               attribute_name => 'SQL_TEXT',

              attribute_value => 'select object_id from t%'); 

      dbms_output.put_line(x);

    end;

  /

PL/SQL procedure successfully completed.

查看如下:

tpcc@TOADDB> select sql_handle,plan_name fromdba_sql_plan_baselines where sql_text like 'select object_id from t%';

SQL_HANDLE

----------------------------------------------------------------------------------------------------

PLAN_NAME

----------------------------------------------------------------------------------------------------

SQL_b7598beb2a522d9d

SQL_PLAN_bfqcbxcp54bcxa0b930be

显示一条SQL的执行计划

我们可以使用dbms_xplan.display_sql_plan_baseline来完成,如下:

tpcc@TOADDB> select sql_handle

   from dba_sql_plan_baselines

   where plan_name = 'SQL_PLAN_bfqcbxcp54bcxa0b930be'

    /

SQL_HANDLE

----------------------------------------------------------------------------------------------------

SQL_b7598beb2a522d9d

tpcc@TOADDB> select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle=> 'SQL_b7598beb2a522d9d'));

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

SQL handle: SQL_b7598beb2a522d9d

SQL text: select object_id from t whereobject_name = 'DUAL'

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

Plan name: SQL_PLAN_bfqcbxcp54bcxa0b930be     Planid: 2696491198

Enabled: YES    Fixed: NO        Accepted:YES  Origin: MANUAL-LOAD

Plan rows: From dictionary

--------------------------------------------------------------------------------

Plan hash value: 767293772

---------------------------------------------------------------------------------------------

| Id | Operation                           | Name | Rows  | Bytes | Cost (%CPU)|Time     |

---------------------------------------------------------------------------------------------

|   0| SELECT STATEMENT                 |           |           |           |         4 (100)|            |

|   1|  TABLE ACCESS BY INDEX ROWID BATCHED|T     |     2 |         60 |           4  (0)| 00:00:01 |

|*  2|   INDEX RANGE SCAN                   | T_IDX |   2 |             |         3  (0)| 00:00:01 |

---------------------------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

   2- access("OBJECT_NAME"='DUAL')

26 rows selected.

也可以输入plan_name,或是两者都输入。还有一个参数为format,来用决定所显示计划的详细信息,其值可以为baice,typical或all。

4.  创建一个AWR基线

通过如下命令来实现。

begin

  dbms_workload_repository.create_baseline(

         start_snap_id=> xxxxx,

         end_snap_id=> yyyy,

         baseline_name=> 'temp_baseline_name');

end;

/

快照点,我们可以使用dba_hist_snapshot视图查找

如下:

tpcc@TOADDB> select snap_id fromdba_hist_snapshot;

  SNAP_ID

----------

         78

         79

         92

         93

         82

         95

         76

         77

         86

         83

         84

         85

         88

         89

         94

         73

         80

         81

         87

         90

         91

         74

         75

23 rows selected.

然后执行如下,创建AWR基线:

begin

   dbms_workload_repository.create_baseline(

start_snap_id =>91,

end_snap_id => 92,

baseline_name => 'temp_baseline_name');

end;

/

PL/SQL procedure successfully completed.

创建一个SQL调优集。

begin

   dbms_sqltune.create_sqlset(

         sqlset_name=> 'temp_sqlset',

         description=> 'sql tune set from awr');

end;

/

PL/SQL procedure successfully completed.

从awr基线中找到占较高资源的查询来填充SQL调优集。

declare

   base_cur dbms_sqltune.sqlset_cursor;

begin

   open base_cur for

   select value(x)

     from table(dbms_sqltune.select_workload_repository(

                            'temp_baseline_name',null,null,'elapsed_time',

                            null,null,null,15))x;

   dbms_sqltune.load_sqlset(

         sqlset_name=> 'temp_sqlset',

         populate_cursor=> base_cur);

end;

/

PL/SQL procedure successfully completed.

为SQL调优集中的每一个查询SQL创建计划基线。

declare

   x pls_integer;

begin

   x := dbms_spm.load_plans_from_sqlset(

                   sqlset_name=> 'temp_sqlset');

end;

/

PL/SQL procedure successfully completed.

这样就完成了调优集中查询SQL的计划基线的创建。

5.  SQL基线综合性使用

很多的时候,优化器只选择一种执行计划,我们尝试使用hint改变这个执行计划,且执行效率有很较大的提升。但是通常是不能够改变产品系统里面的SQL代码的。在这种情况下,会用到SQL 计划基线,在不改变SQL的情况下让优化器选择我们加个hint后的执行计划。使用SQL计划基线是一个不错的选择。

测试如下:

准备表

如下:

tpcc@TOADDB> drop table t purge;

Table dropped.

tpcc@TOADDB> create table t as select * fromall_objects;

Table created.

tpcc@TOADDB> create index t_idx on t(object_name);

Index created.

tpcc@TOADDB> execdbms_stats.gather_table_stats(user,'t',cascade=>true);

PL/SQL procedure successfully completed.

variable name varchar2(30)

exec :name := 'DUAL'

PL/SQL procedure successfully completed.

执行SQL

tpcc@TOADDB> select count(*) from t whereobject_name = :name;

 COUNT(*)

----------

          2

常看刚执行SQL的SQL_ID

tpcc@TOADDB> Select sql_id, child_number from  v$sql where sql_text like 'select count(*) from t where object_name = :name';

SQL_ID           CHILD_NUMBER

------------- ------------

astw879f24195                 0

显示执行计划:

tpcc@TOADDB> select * fromtable(dbms_xplan.display_cursor(sql_id=>'astw879f24195'));

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

SQL_ID     astw879f24195,child number 0

-------------------------------------

select count(*) from t where object_name =:name

Plan hash value: 293504097

---------------------------------------------------------------------------

| Id | Operation      | Name | Rows  | Bytes | Cost (%CPU)|Time         |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT  |        |     |     |   3 (100)|      |

|   1|  SORT AGGREGATE   |     |   1|    25 |             |            |

|*  2|   INDEX RANGE SCAN| T_IDX |       2 |   50 |      3   (0)| 00:00:01 |

---------------------------------------------------------------------------

Predicate Information (identified byoperation id):

---------------------------------------------------

   2- access("OBJECT_NAME"=:NAME)

19 rows selected.

带HINT执行

如下:

tpcc@TOADDB> select /*+full(t)*/ count(*) from twhere object_name = :name;

 COUNT(*)

----------

          2

查看执行计划的SQL_ID如下:

tpcc@TOADDB> select sql_id, child_number from v$sqlwhere sql_text like 'select /*+full(t)*/ count(*) from t where object_name =:name';

 

SQL_ID           CHILD_NUMBER

------------- ------------

9rsq8360s27zu                  0

查看执行计划:

tpcc@TOADDB> select * fromtable(dbms_xplan.display_cursor(sql_id=>'9rsq8360s27zu'));

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

SQL_ID     9rsq8360s27zu,child number 0

-------------------------------------

select /*+full(t)*/ count(*) from t whereobject_name = :name

 

Plan hash value: 2966233522

 

---------------------------------------------------------------------------

| Id | Operation       | Name | Rows  | Bytes | Cost (%CPU)| Time          |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT   |      |     |    |   422 (100)|      |

|   1|  SORT AGGREGATE    |            |   1|    25 |             |            |

|*  2|   TABLE ACCESS FULL| T    |   2 |   50 |   422   (1)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

   2- filter("OBJECT_NAME"=:NAME)

19 rows selected.

然后改变第一个执行SQL(未带HINT)的执行计划,让其走使用hint后的SQL——“9rsq8360s27zu”的执行计划,也就是让它走全表扫描

创建两条SQL计划基线

tpcc@TOADDB> Select sql_id,hash_value,child_numberfrom  v$sql  where sql_text like 'select count(*) from twhere object_name = :name';

SQL_ID           HASH_VALUE CHILD_NUMBER

------------- ---------- ------------

astw879f24195 1545733413      0

tpcc@TOADDB> select sql_id, hash_value,child_numberfrom v$sql where sql_text like 'select /*+full(t)*/ count(*) from t whereobject_name = :name';

SQL_ID           HASH_VALUE CHILD_NUMBER

------------- ---------- ------------

9rsq8360s27zu 2172723194       0

创建SQL基线如下:

declare

       xpls_integer;

    begin

       x :=dbms_spm.load_plans_from_cursor_cache(

              sql_id => 'astw879f24195',

              plan_hash_value => '293504097'

            );

        dbms_output.put_line(x);

   end;

   /

第二条:

declare

       xpls_integer;

    begin

       x :=dbms_spm.load_plans_from_cursor_cache(

              sql_id => '9rsq8360s27zu',

              plan_hash_value => '2966233522'

           ); 

      dbms_output.put_line(x);

   end;

   /

查看基线:

SQL>select plan_name,  enabled,  fixed,  sql_handle,sql_text from dba_sql_plan_baselines where 1 = 1 and sql_textlike '%count(*) from t where object_name = :name%';

PLAN_NAME

----------------------------------------------------------------------------------------------------

ENA FIX

--- ---

SQL_HANDLE

----------------------------------------------------------------------------------------------------

SQL_TEXT

--------------------------------------------------------------------------------

SQL_PLAN_7x3fcur5rkfgm3fdbb376

YES NO

SQL_7e8dccd5cb7939f3

select /*+full(t)*/ count(*) from t whereobject_name = :name

 

SQL_PLAN_4d8jvstgfrn4vded8ae2f

YES NO

SQL_46a23bc65eebd09b

select count(*) from t where object_name =:name

查看一下每个计划基线里的执行计划

SQL> select * fromtable(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SQL_7e8dccd5cb7939f3'));

 

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

SQL handle: SQL_7e8dccd5cb7939f3

SQL text: select /*+full(t)*/ count(*) fromt where object_name = :name

--------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

Plan name: SQL_PLAN_7x3fcur5rkfgm3fdbb376      Plan id: 1071362934

Enabled: YES    Fixed: NO        Accepted:YES  Origin: MANUAL-LOAD

Plan rows: From dictionary

--------------------------------------------------------------------------------

 

Plan hash value: 2966233522

 

---------------------------------------------------------------------------

| Id | Operation       | Name | Rows  | Bytes | Cost (%CPU)| Time          |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT   |     |     |    |   422 (100)|      |

|   1|  SORT AGGREGATE    |            |   1|    25 |      0   (0)|    |

|*  2|   TABLE ACCESS FULL| T    |   2 |   50 |   422   (1)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

 

   2- filter("OBJECT_NAME"=:NAME)

 

26 rows selected.

idle> select * fromtable(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SQL_46a23bc65eebd09b'));

 

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

SQL handle: SQL_46a23bc65eebd09b

SQL text: select count(*) from t where object_name= :name

--------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

Plan name: SQL_PLAN_4d8jvstgfrn4vded8ae2f       Plan id: 3738742319

Enabled: YES    Fixed: NO        Accepted:YES  Origin: MANUAL-LOAD

Plan rows: From dictionary

--------------------------------------------------------------------------------

 

Plan hash value: 293504097

 

---------------------------------------------------------------------------

| Id | Operation      | Name | Rows  | Bytes | Cost (%CPU)|Time         |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT  |        |     |     |   3 (100)|      |

|   1|  SORT AGGREGATE   |     |   1|    25 |      0   (0)|    |

|*  2|   INDEX RANGE SCAN| T_IDX |       2 |   50 |      3   (0)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

 

   2- access("OBJECT_NAME"=:NAME)

 

26 rows selected.

改变的SQL信息

把加hint后生成的SQL ID与 Plan Hash Value(全表扫描)加载到走索引生成的SQL计划基线当中。

declare

       xpls_integer;

    begin

       x :=dbms_spm.load_plans_from_cursor_cache(

              sql_id => '9rsq8360s27zu',

              plan_hash_value => '2966233522',

              sql_handle => 'SQL_46a23bc65eebd09b'

           );

 

     dbms_output.put_line(x);

  end;

  /

PL/SQL procedure successfully completed.

其中SQL_46a23bc65eebd09b 是走索引的SQL HANDLE。

而sql_id => '9rsq8360s27zu',

plan_hash_value => '2966233522',

是走全表扫描的相关索引。

执行之后原先走索引的SQL会走全表。

这样的话

SQL Handle为“SQL_46a23bc65eebd09b”的计划基线有两份,因为刚才加载又生成了一份。需要把原来走索引的那个Pan Baseline删除或禁用掉,保留全表扫描的那一个。

查看如下:

tpcc@TOADDB> select * fromtable(dbms_xplan.display_sql_plan_baseline(sql_handle=>'SQL_46a23bc65eebd09b'));

 

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

SQL handle: SQL_46a23bc65eebd09b

SQL text: select count(*) from t whereobject_name = :name

--------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------

Plan name: SQL_PLAN_4d8jvstgfrn4v3fdbb376       Plan id: 1071362934

Enabled: YES    Fixed: NO        Accepted:YES  Origin: MANUAL-LOAD

Plan rows: From dictionary

--------------------------------------------------------------------------------

 

Plan hash value: 2966233522

 

---------------------------------------------------------------------------

| Id | Operation       | Name | Rows  | Bytes | Cost (%CPU)| Time          |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT   |      |     |    |   422 (100)|      |

|   1|  SORT AGGREGATE    |            |   1|    25 |      0   (0)|    |

|*  2|   TABLE ACCESS FULL| T    |   2 |   50 |   422   (1)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

 

   2- filter("OBJECT_NAME"=:NAME)

 

--------------------------------------------------------------------------------

Plan name: SQL_PLAN_4d8jvstgfrn4vded8ae2f       Plan id: 3738742319

Enabled: YES    Fixed: NO        Accepted:YES  Origin: MANUAL-LOAD

Plan rows: From dictionary

--------------------------------------------------------------------------------

 

Plan hash value: 293504097

 

---------------------------------------------------------------------------

| Id | Operation      | Name | Rows  | Bytes | Cost (%CPU)|Time         |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT  |        |     |     |   3 (100)|      |

|   1|  SORT AGGREGATE   |     |   1|    25 |      0   (0)|    |

|*  2|   INDEX RANGE SCAN| T_IDX |       2 |   50 |      3   (0)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified by operationid):

---------------------------------------------------

 

   2- access("OBJECT_NAME"=:NAME)

 

47 rows selected.

删除原先的基线

程序如下:

declare

       xpls_integer;

    begin

       x :=dbms_spm.drop_sql_plan_baseline(

                      plan_name => 'SQL_PLAN_4d8jvstgfrn4vded8ae2f',

                      sql_handle => 'SQL_46a23bc65eebd09b'

             );

 

    end;

   /

执行查看

tpcc@TOADDB> select count(*) from t whereobject_name = :name;

 

 COUNT(*)

----------

          2

 

 

Execution Plan

----------------------------------------------------------

Plan hash value: 2966233522

 

---------------------------------------------------------------------------

| Id | Operation       | Name | Rows  | Bytes | Cost (%CPU)| Time          |

---------------------------------------------------------------------------

|   0| SELECT STATEMENT   |      |   1 |   25 |   422   (1)| 00:00:01 |

|   1|  SORT AGGREGATE    |            |   1|    25 |             |            |

|*  2|   TABLE ACCESS FULL| T    |   2 |   50 |   422   (1)| 00:00:01 |

---------------------------------------------------------------------------

 

Predicate Information (identified byoperation id):

---------------------------------------------------

 

   2- filter("OBJECT_NAME"=:NAME)

 

Note

-----

   -SQL plan baseline "SQL_PLAN_4d8jvstgfrn4v3fdbb376" used for thisstatement

 

 

Statistics

----------------------------------------------------------

           7 recursive calls

           0  dbblock gets

      1519  consistent gets

           0 physical reads

           0  redosize

         542  bytes sent via SQL*Net to client

         551  bytes received via SQL*Net from client

           2 SQL*Net roundtrips to/from client

           0 sorts (memory)

           0 sorts (disk)

           1  rowsprocessed

走的是SQL基线了。

6.  基线维护

查看基线

一个查询已经有计划基线。然后新加了一个这个查询可以使用的索引。

优化器确实这个查询现在有成本更低的新执行计划可用。并将这个新执行以未被接受的状态加入到计划历史中。

通过SQL调优顾问给出的建议或者通过查询dba_sql_plan_baselines视图发现了新的计划。

tpcc@TOADDB> select plan_name,sql_handle,enabled,accepted,optimizer_costfrom dba_sql_plan_baselines where sql_text like 'select object_id from t%';

PLAN_NAME

----------------------------------------------------------------------------------------------------

SQL_HANDLE

----------------------------------------------------------------------------------------------------

ENA ACC OPTIMIZER_COST

--- --- --------------

SQL_PLAN_bfqcbxcp54bcxa0b930be

SQL_b7598beb2a522d9d

YES YES        4

接受基线中的计划

找到未被接受的执行计划,即accepted为NO的SQL执行计划,然后我们用dbms_spm.evolve_sql_plan_baseline函数来将一个计划历史移到计划基线中,可用如下类似的脚本:

declare

  val clob;

begin

  val := dbms_spm.evolve_sql_plan_baseline(

                   sql_handle=> 'SQL_b7598beb2a522d9d');

  dbms_output.put_line(val);

end;

/

禁用基线计划

计划基线进行一个禁用。我们可以使用如下的方法。

declare

         x pls_integer;

begin

         x := dbms_spm.alter_sql_plan_baseline(

                            plan_name=> 'SQL_PLAN_bfqcbxcp54bcxa0b930be',

                            attribute_name =>'ENABLED',

                            attribute_value=> 'NO'

              );

         dbms_output.put_line(x);

end;

/

PL/SQL proceduresuccessfully completed.

然后查看如下:

tpcc@TOADDB> select plan_name,sql_handle,enabled,accepted,optimizer_costfrom dba_sql_plan_baselines where sql_text like 'select object_id from t%';

PLAN_NAME

----------------------------------------------------------------------------------------------------

SQL_HANDLE

----------------------------------------------------------------------------------------------------

ENA ACCOPTIMIZER_COST

--- -----------------

SQL_PLAN_bfqcbxcp54bcxa0b930be

SQL_b7598beb2a522d9d

NO YES              4

删除计划基线

如果,某个计划基线不再使用,我们可以对它进行一个删除。我们可以使用如下的方法。

declare

         x pls_integer;

begin

         x := dbms_spm.drop_sql_plan_baseline(

                            plan_name=> 'SQL_PLAN_bfqcbxcp54bcxa0b930be'

               );

end;

/

PL/SQL proceduresuccessfully completed.

查看如下,被删除了:

tpcc@TOADDB> select plan_name,sql_handle,enabled,accepted,optimizer_costfrom dba_sql_plan_baselines where sql_text like 'select object_id from t%';

no rows selected

自动增加计划基线

修改参数optimizer_capture_sql_plan_baselines的值即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值