执行计划的管理---baseline(11g)
来源:互联网 发布:泰克飞石 知乎 编辑:程序博客网 时间:2024/04/28 10:30
baseline是oracle11g的新功能。
它是一种新的方式来管理sql_plan,相比之前的sql调优方式,baseline有一种防患于未然的效果,只有经过优化器
评估,不会使得性能下降的sql_plan才会加入到baseline中。具体baseline的知识请参考tuning guide 15章。
当使用了baseline管理执行计划的时候
alter system set optimizer_use_sql_plan_baselines=true;SQL> show parameter optimizer_use
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
create table gg as select * from all_objects;
analyze table gg estimate statistics;
select * from gg where object_id=4
--sql_id = 0h2mtxura560p
-- sql_plain_name : SQL_PLAN_5sv1s3v6qv6xm00585137
SELECT sql_handle, sql_text, enabled, accepted
FROM dba_sql_plan_baselines
WHERE PLAN_NAME='SQL_PLAN_5sv1s3v6qv6xm00585137'
SELECT sql_handle, sql_text, enabled, accepted, fixed,PLAN_NAME from dba_sql_plan_baselines
where sql_handle = 'SYS_SQL_5c6c381ecd6d9bb3'
SQL_HANDLE SQL_TEXT ENABLE ACCEPT FIXED PLAN_NAME
------------------------------ ---------------------------------------- ------ ------ ------ ---------------------------------------------
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES NO SQL_PLAN_5sv1s3v6qv6xm00585137
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES NO NO SQL_PLAN_5sv1s3v6qv6xm35f17884
也可以这样展示:
SELECT * FROM TABLE(
DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
sql_handle=>'SYS_SQL_5c6c381ecd6d9bb3 ',
format=>'basic'));
SET LONG 10000
DECLARE
report clob;
BEGIN
report := DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(
sql_handle => 'SYS_SQL_5c6c381ecd6d9bb3');
DBMS_OUTPUT.PUT_LINE(report);
END;
/
-------------------------------------------------------------------------------
Evolve SQL Plan Baseline Report
-------------------------------------------------------------------------------
Inputs:
-------
SQL_HANDLE = SYS_SQL_5c6c381ecd6d9bb3
PLAN_NAME =
TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
VERIFY = YES
COMMIT = YES
Plan:
SQL_PLAN_5sv1s3v6qv6xm35f17884
------------------------------------
Plan was verified: Time used .03 seconds.
Plan passed performance criterion:
57.16 times better than baseline plan.
Plan was changed to an accepted plan.
Baseline Plan Test Plan Stats
Ratio
------------- --------- -----------
Execution Status: COMPLETE COMPLETE
Rows
Processed: 1 1
Elapsed Time(ms): 1.198 .031 38.65
CPU Time(ms): .999 .111 9
Buffer Gets: 172 3 57.33
Physical Read Requests:0 0
Physical Write Requests: 0 0
Physical Read Bytes: 0 0
Physical Write
Bytes: 0 0
Executions: 1
1
-------------------------------------------------------------------------------
Report
Summary
-------------------------------------------------------------------------------
Number of plans verified: 1
Number of plans accepted: 1
PL/SQL procedure successfully completed.
SQL> SELECT sql_handle, sql_text, enabled, accepted, fixed,PLAN_NAME from dba_sql_plan_baselines
2 where sql_handle = 'SYS_SQL_5c6c381ecd6d9bb3'
3 /
SQL_HANDLE SQL_TEXT ENABLE ACCEPT FIXED PLAN_NAME
------------------------------ ---------------------------------------- ------ ------ ------ ---------------------------------------------
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES NO SQL_PLAN_5sv1s3v6qv6xm00585137
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES NO SQL_PLAN_5sv1s3v6qv6xm35f17884
--可以设置一个sql_plan的fixed值 为yes
DECLARE
ret PLS_INTEGER;
BEGIN
ret := dbms_spm.alter_sql_plan_baseline(
sql_handle => '&sql_handle',
plan_name=>'&plan_name',
attribute_name=>'&attribute',
attribute_value=>'&value'
);
dbms_output.put_line(ret || ' SQL plan baseline(s) dropped');
END;
/
Enter value for sql_handle: SYS_SQL_d7ca54dcd5e813c7
old 5: sql_handle => '&sql_handle',
new 5: sql_handle => 'SYS_SQL_d7ca54dcd5e813c7',
Enter value for plan_name: SQL_PLAN_dgkknvmayh4y713fa51c2
old 6: plan_name=>'&plan_name',
new 6: plan_name=>'SQL_PLAN_dgkknvmayh4y713fa51c2',
Enter value for attribute: fixed
old 7: attribute_name=>'&attribute',
new 7: attribute_name=>'fixed',
Enter value for value: yes
old 8: attribute_value=>'&value'
new 8: attribute_value=>'yes'
SQL> SELECT sql_handle, sql_text, enabled, accepted, fixed,PLAN_NAME from dba_sql_plan_baselines
2 where sql_handle = 'SYS_SQL_5c6c381ecd6d9bb3'
3 /
SQL_HANDLE SQL_TEXT ENABLE ACCEPT FIXED PLAN_NAME
------------------------------ ---------------------------------------- ------ ------ ------ ---------------------------------------------
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES NO SQL_PLAN_5sv1s3v6qv6xm00585137
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES YES SQL_PLAN_5sv1s3v6qv6xm35f17884
---都是fixed状态的时候 比较 cost
SQL_HANDLE SQL_TEXT ENABLE ACCEPT FIXED PLAN_NAME
------------------------------ ---------------------------------------- ------ ------ ------ ---------------------------------------------
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES YES SQL_PLAN_5sv1s3v6qv6xm00585137
SYS_SQL_5c6c381ecd6d9bb3 select * from gg where object_id = 4 YES YES YES SQL_PLAN_5sv1s3v6qv6xm35f17884
--比如:用了 fixed=yes的baseline,因为它优先级别高,都是fixed的时候 还是比较cost,谁的低使用谁
SQL> select * from gg where object_id = 4
Execution Plan
----------------------------------------------------------
Plan hash value: 1559536923
--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 92 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| GG | 1 | 92 | 2 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | GG_IDX | 1 | | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OBJECT_ID"=4)
Note
-----
- SQL plan baseline "SQL_PLAN_5sv1s3v6qv6xm35f17884" used for this statement
alter system set optimizer_use_sql_plan_baselines=FALSE;~~~~~~~~改为false
SQL> show parameter optimizer_use
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
optimizer_use_invisible_indexes boolean FALSE
optimizer_use_pending_statistics boolean FALSE
optimizer_use_sql_plan_baselines boolean TRUE
- 执行计划的管理---baseline(11g)
- 执行计划的管理---baseline(11g)
- oracle 11g BaseLine(基线)指定application中不可修改sql的执行计划
- spm baseline 保持执行计划的稳定性
- Oracle 11g AWR 系列三:AWR baseline 的管理
- oracle 11G 执行计划管理
- 显示baseline的SQL的执行计划内容
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- Oracle SQL执行计划基线总结(SQL Plan Baseline)
- 点评Oracle 11g新特性之执行计划管理
- SPM(SQL Plan baseline)(11g)
- Oracle 11g AWR 系列四:AWR baseline template 的管理
- SQL BASELINE修改固定执行计划
- SQL BASELINE修改固定执行计划
- Oracle 11g 递归+ exists执行计划的改变
- dbms_spm之baseline FIXED=YES使用陷阱(执行计划不通用),严重影响系统;
- dbms_xplan.display_cursor 查看已执行SQL的执行计划(10g后)
- 索引(index)
- bash: ifconfig: command not found 解决办法
- 本人自用常用代码备用文档
- hrtimer和work工作队列的使用
- 云GIS、公众GIS与移动GIS
- 执行计划的管理---baseline(11g)
- Js计算指定日期加上多少天、加多少月、加多少年的日期
- mac os x 命令+10个常用命令行工具
- Android webView播放flash
- linux-wireless驱动移植
- Thread Management 线程管理
- 关于 人人网 的开发 API
- OOB套接字传输实例(达不到预期结果)
- 无线ap配置文档