博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11g新特性-SQL Plan Management
阅读量:6999 次
发布时间:2019-06-27

本文共 3480 字,大约阅读时间需要 11 分钟。

在11g之前版本,提供了stored outlines(sql概要)特性来保存sql的执行计划。

在11g中,引入了一个新的特性sql计划管理(sql plan management)特性来保存sql性能。

 

数据库自动控制sql执行计划的演变,借助sql plan baselines。 SPM会不时的捕获和评估sql的执行计划,然后建立只包含高效的执行计划的sql plan baselines。 sql plan baselines只会包含那些不会引起sql性能下降的执行计划。

 

当系统遇到以下变化时,可以使用SPM来保存sql的性能信息:

-数据库升级

-新的优化器版本

-优化器参数修改

-系统设置变更

-schema信息和元数据变更

-部署新的应用模块

 

sql plan baselines

sql plan baseline是数据库为每个可重复执行sql语句维护的历史执行计划的集合。这些执行计划只包含数据库可接受的执行计划。

1.自动捕获sql plan baselines

自动捕获需要设置参数optimizer_capture_sql_plan_baselines的值为true,默认是false。

SQL> alter system set optimizer_capture_sql_plan_baselines=true scope=spfile;
2.手动加载sql plan到sql plan baselines
可以从SQL Tuning Set (STS) 和 Cursor Cache中创建sql plan baselines。
【在数据库升级时,当心升级后会性能下降的话,可以在升级前将sql plan导出,升级后再导入】 
(1)从sql tuning set中导出sql plan
     #创建空的sql调优集
begin          dbms_sqltune.create_sqlset(               sqlset_name => 'testset1',               description => 'test sql tuning set to capture awr data'          );     end;     /

  #使用load_sqlset将sql plan加载到新创建的sql tuning set中

declare        test_cursor1 dbms_sqltune.sqlset_cursor;    begin        open baseline_cursor for            select value(p) from table(dbms_sqlture.select_workload_repository('peak baseline',null,null,'elapsed_time',null,null,null,20)) p;        dbms_sqlset.load_sqlset(sqlset_name => 'testset1',populate_cursor => test_cursor1);    end;    /

  #将sql tuning set中的数据导入sql plan baselines

declare        test_plans pls_integer;    begin        test_plans := dbms_spm.load_plans_from_sqlset(sqlset_name => 'testset1');    end;    /

(2)从Cursor Cache中导出sql plan

declare  test_plans pls_integer; begin  test_plans := dbms_spm.load_plans_from_cursor_cache (  sql_id => '123456789999')  return pls_integer; end; /

 

管理sql plan baselines使用oracle提供的dbms_spm包。

查看SQL plan baselines的属性

select sql_handle,       sql_text,       plan_name,       origin,       enabled,       accepted,       fixed,       autopurge  from dba_sql_plan_baselines;

将某个sql plan修改为accept状态

SQL> exec dbms_spm.alter_sql_plan_baselines(        sql_handle => SYS_SQL_122222222',        plan_name => 'SYS_SQL_PLAN_b5429522ee05ab0e',        attribute_name => 'accepted-status',        attribute_value => 'YES');

查看某个sql的baseline:

select *  from table(dbms_xplan.display_sql_plan_baseline(sql_handle => 'SYS_SQL_ba5e12ccae97040f',                                                  format     => 'basic'));

 

SQL Management Base
sql plan management将sql plan baselines信息存放在一个新的数据字典中--sql management base(SMB)。
SMB被存放在sysaux表空间中。
配置sql management base(SMB)
配置SMB需要设置以下两个参数:

SQL> select parameter_name,parameter_value   2  from dba_sql_management_config;PARAMETER_NAME                 PARAMETER_VALUE------------------------------ ---------------SPACE_BUDGET_PERCENT                        10PLAN_RETENTION_WEEKS                        53SQL>

参数space_budget_percent表示SMB可以占用sysaux表空间的比例。默认是10%

SQL> exec dbms_spm.configure('space_budget_percent',40);SQL> exec dbms_spm.configure ('plan_retention_weeks', 105);

#手动清空SMB

SQL> exec dbms_spm.purge_sql_plan_baseline('SYS_SQL_PLAN_b5429522ee05ab0e');

查看SMB配置信息:

SQL> select PARAMETER_NAME,PARAMETER_VALUE,LAST_MODIFIED,MODIFIED_BY  2  from dba_sql_management_config;PARAMETER_NAME                 PARAMETER_VALUE LAST_MODIFIED        MODIFIED_BY------------------------------ --------------- -------------------- --------------------SPACE_BUDGET_PERCENT                        10PLAN_RETENTION_WEEKS                        53SQL>

 

 

 

转载于:https://www.cnblogs.com/wangchaoyuana/p/7532065.html

你可能感兴趣的文章
poj 1988 Cube Stacking(并查集)
查看>>
lamp 403
查看>>
关于“鸡脚神”的看法
查看>>
c# 路径空格---ProcessStartInfo参数问题
查看>>
我的MYSQL学习心得(十七) 复制
查看>>
用eclipse建立servlet工程
查看>>
MySql通用分页存储过程
查看>>
LoadRunner脚本回放日志中的Warning信息
查看>>
Surround the Trees(凸包求周长)
查看>>
转载:如何运用VI编辑器进行查找替换
查看>>
android xutils
查看>>
strut2.xml中result param详细设置
查看>>
Mysql注入绕过姿势
查看>>
移动互联网实战--社交游戏的排行榜设计和实现(2)
查看>>
开源工具DbUtils的使用(数据库的增删改查)
查看>>
不要再用if(xxx != null)或者try catch NullPointerException了,Optional可以帮你解决
查看>>
excel读写技术二
查看>>
Panorama控件和Pivot控件【WP7学习札记之十四】
查看>>
dialog shell下的gui设计 代替繁杂libncurses编程
查看>>
Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法
查看>>