您的位置:首页 > 数据库

通过案例学调优之--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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐