通过案例学调优之--SQL Profile
2015-03-31 12:09
134 查看
通过案例学调优之--SQL Profile一、什么是SQL Profile(概要) SQL Profile在性能优化中占有一个重要的位置。 MOS里这么描述SQL Profile: SQL Profile是10g中的新特性,作为自动SQL调整过程的一部分,由Oracle企业管理器来管理。除了OEM,SQL Profile可以通过DBMS_SQLTUNE包来进行管理。 查询优化器有时候会因为缺乏足够的信息,而对一条SQL语句做出错误的估计,生成糟糕的执行计划。而自动SQL调整通过SQL概要分析来解决这个问题,自动调整优化器会生成这条SQL语句的一个概要,称作SQL Profile。它由针对这条语句的一些辅助统计信息组成,通过采样和局部执行技术来确认,必要的话,会调整执行计划中的估计值。在SQL概要分析中,自动调整优化器还可以通过一条SQL语句的执行历史信息来设置合适的优化器参数,比如将OPTIMIZER_MODE参数由ALL_ROWS改为FIRST_ROWS。 换句话说,SQL概要是一个对象,它包含了可以帮助查询优化器为一个特定的SQL语句找到高效执行计划的信息。这些信息包括执行环境、对象统计和对查询优化器所做评估的修正信息。它的最大优点之一就是在不修改SQL语句和会话执行环境的情况下影响查询优化器的决定。(《Oracle性能诊断艺术》) SQL Profile中包含的并非单个执行计划的信息,必须注意的是,SQL Profile不会固定一个SQL语句的执行计划。当表的数据增长或者索引创建、删除,使用同一个SQL Profile的执行计划可能会改变,而储存在SQL Profile中的信息会继续起作用。然而,经过一段很长的时间之后,它的信息有可能会过时,需要重新生成。 SQL Profile的作用范围由CATEGORY属性来控制,这个属性决定了哪些用户会话可以应用这个概要。你可以从DBA_SQL_PROFILES中的CATEGORY字段来查看这个属性。默认情况下,所有概要文件都创建为DEFAULT范畴,这意味着所有SQLTUNE_CATEGORY初始化参数为DEFAULT的用户会话都可以使用这个概要。你可以修改这个属性,比如将其改为SCO,则SQLTUNE_GATEGORY参数为SCO的用户会话才能使用它,利用这个功能,你可以在一个受限制的环境中来测试一个SQL Profile。[code=jfx;toolbar:false">16:42:03 SYS@ prod >desc dba_sql_profiles
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
NAME NOT NULL VARCHAR2(30)
CATEGORY NOT NULL VARCHAR2(30)
SIGNATURE NOT NULL NUMBER
SQL_TEXT NOT NULL CLOB
CREATED NOT NULL TIMESTAMP(6)
LAST_MODIFIED TIMESTAMP(6)
DESCRIPTION VARCHAR2(500)
TYPE VARCHAR2(7)
STATUS VARCHAR2(8)
FORCE_MATCHING VARCHAR2(3)
TASK_ID NUMBER
TASK_EXEC_NAME VARCHAR2(30)
TASK_OBJ_ID NUMBER
TASK_FND_ID NUMBER
TASK_REC_ID NUMBER
16:50:43 SYS@ prod >select name, CATEGORY,sql_text,status from dba_sql_profiles;
no rows selectedBEGIN
DBMS_SQLTUNE.ALTER_SQL_PROFILE(
name => 'my_sql_profile',
attribute_name => 'STATUS',
value => 'DISABLED');
END;
/比如利用sql_id来创建tuning_task,我们可以这么运行
declare
tuning_task varchar2(30);
begin
tuning_task:=dbms_sqltune.create_tuning_task(sql_id => 'bfb9vn0gh3z0t');
dbms_output.put_line(tuning_task);
end;
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
NAME NOT NULL VARCHAR2(30)
CATEGORY NOT NULL VARCHAR2(30)
SIGNATURE NOT NULL NUMBER
SQL_TEXT NOT NULL CLOB
CREATED NOT NULL TIMESTAMP(6)
LAST_MODIFIED TIMESTAMP(6)
DESCRIPTION VARCHAR2(500)
TYPE VARCHAR2(7)
STATUS VARCHAR2(8)
FORCE_MATCHING VARCHAR2(3)
TASK_ID NUMBER
TASK_EXEC_NAME VARCHAR2(30)
TASK_OBJ_ID NUMBER
TASK_FND_ID NUMBER
TASK_REC_ID NUMBER
16:50:43 SYS@ prod >select name, CATEGORY,sql_text,status from dba_sql_profiles;
no rows selectedBEGIN
DBMS_SQLTUNE.ALTER_SQL_PROFILE(
name => 'my_sql_profile',
attribute_name => 'STATUS',
value => 'DISABLED');
END;
/比如利用sql_id来创建tuning_task,我们可以这么运行
declare
tuning_task varchar2(30);
begin
tuning_task:=dbms_sqltune.create_tuning_task(sql_id => 'bfb9vn0gh3z0t');
dbms_output.put_line(tuning_task);
end;
相关文章推荐
- 通过案例学调优之--SQL Profile
- 通过案例学调优之--跨库建立物化视图(Materialized View)
- 通过案例学调优之--Oracle中null使用索引
- 《Spark商业案例与性能调优实战100课》第1课:商业案例之通过RDD实现分析大数据电影点评系统中电影的用户行为信息
- 【Oracle】转:通过案例学调优之--Oracle Time Model(时间模型)
- 通过案例学调优之--动态视图(v$bh和x$bh)
- 通过案例学调优之--和 BUFFER CACHE 相关的主要 Latch
- 通过案例学调优之--RECORDS_PER_BLOCK参数
- 通过案例学调优之--JOB管理
- 通过案例学调优之--AWR基本概念
- 通过案例学调优之--跨库建立物化视图(Materialized View)
- 通过案例学调优之--分区表基本概念
- 《Spark商业案例与性能调优实战100课》第9课:商业案例之通过Spark SQL 下两种不同方式实现口碑最佳和最热门电影比较
- 通过案例学调优之--Oracle Time Model(时间模型)
- 通过案例学调优之--10046事件
- 通过案例学调优之--AWR Snapshot管理
- Spark商业案例与性能调优实战100课》第3课:商业案例之通过RDD分析大数据电影点评系各种类型的最喜爱电影TopN及性能优化技巧
- 通过案例学调优之--模拟buffer busy waits事件
- 《Spark商业案例与性能调优实战100课》第14课:商业案例之纯粹通过DataSet进行电商交互式分析系统中特定时段购买金额Top10 和访问次数增长Top10
- 第121课: Spark Streaming性能优化:通过摄像头图像处理案例来说明Spark流处理性能评估新方法及性能调优参数测试