ORACLE 11g新特性
2013-06-07 10:20
706 查看
摘自:http://blog.chinaunix.net/uid-7540710-id-135049.html
11g新特性:SQL Performance Analyzer(SPA) |
系统变更会影响SQL的执行计划,比如数据库升级,优化参数调整,表结构变更,索引维护(创建,删除,重建),统计信息收集等,Oracle为了预防系统变更所引起的不良后果,特推出SPA,SPA做为RAT(Real Application Test)的一部分,可以消除一些不知预知的错误,Oracle提供dbms_sqlpa包来实现系统变更前后的性能分析,SPA主要应用在以上方面: ■ Database upgrade ■ Configuration changes to the operating system, hardware, or database ■ Database initialization parameter changes ■ Schema changes, for example, adding new indexes or materialized views ■ Gathering optimizer statistics ■ SQL tuning actions, for example, creating SQL profiles 1 使用SPA的前提条件 由于数据库的复杂性,如果想使用SPA来度量生产库变更对性能影响的话,测试环境的软硬件配置需要与生产环境是一致的,同样DB的初始化参数等也要求与产品库是一致的,可以用RMAN,DATA PUMP等工具创建测试环境。 2 导入负载到测试环境 把生产库上需要测试的SQL装载到SQL Tuning Set(STS),然后导出STS到测试环境。 3 创建SPA TASK declare VAR v_spa_name VARCHAR2(100); begin :t_name := DBMS_SQLPA.CREATE_ANALYSIS_TASK( sqlset_name => 'my_sts', task_name => 'my_spa_task'); end; 4 变更前执行SPA TASK EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'my_spa_task', - execution_type => 'TEST EXECUTE', - execution_name => 'my_exec_BEFORE_change'); 5 执行变更 比如修改优化参数&添加或删除索引&收集表与索引的统计信息等 6 变更后执行SPA TASK EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'my_spa_task', - execution_type => 'TEST EXECUTE', - execution_name => 'my_exec_AFTER_change'); 7 比较SQL性能 EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( task_name => 'my_spa_task', - execution_type => 'COMPARE PERFORMANCE', - execution_name => 'my_exec_compare', - execution_params => dbms_advisor.arglist('comparison_metric', 'buffer_gets')); 8 报告SPA分析结果 VAR rep CLOB; EXEC :rep := DBMS_SQLPA.REPORT_ANALYSIS_TASK('my_spa_task','text', 'typical', 'summary'); SET LONG 100000 LONGCHUNKSIZE 100000 LINESIZE 130 PRINT :rep |
11g新特性:Automatic SQL Tuning Advisor | |||
在11g中,优化器有两种模式:普通模式与调化模式。优化器在普通模式下,当SQL被执行时,查询优化器将生成SQL的执行计划,如果SQL的可选路径很多,优化器必须是限制时间内,选择一个合适的执行计划;当优化器在调优模式下,优化器需要执行额外的分析去判断优化器在普通模式下产生的执行计划是否有可能被改进,此时优化器输出的不是一个执行计划,而是一系列的动作,根据调优的原理、产生一个更优化的执行计划,优化器需发花费一定的时间去调优单个的sql,自动调优的优化器每次查询都是硬解析。 The Automatic Tuning Optimizer performs four types of tuning analysis: ■ Statistics Analysis ■ SQL Profiling ■ Access Path Analysis ■ SQL Structure Analysis 1 Automatic SQL Tuning Advisor A 从AWR报表中识别High-Load SQL B 调用SQL Tuning Advisor调优识别的High-Load SQL C 执行SQL测试它的SQL Profile 2 Enabling Automatic SQL Tuning BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE( client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); END; / 3 Disabling Automatic SQL Tuning BEGIN DBMS_AUTO_TASK_ADMIN.DISABLE( client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); END; / 4 Configuring Automatic SQL Tuning BEGIN DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER( task_name => 'SYS_AUTO_SQL_TUNING_TASK', parameter => 'ACCEPT_SQL_PROFILES', value => 'TRUE'); END; / 说明:sys_auto_sql_tuning_task是系统产生的auto task. 5 查看tuning report SQL> set long 1000 SQL> set longchunksize 1000 SQL> set linesize 100 SQL> select dbms_sqltune.report_tuning_task('SYS_AUTO_SQL_TUNING_TASK') from dual; 6 Automatic SQL Tuning Directory SQL> select task_id,task_name from dba_advisor_tasks where task_id = 1; TASK_ID TASK_NAME ---------- ------------------------------------------------------------ 1 SYS_AUTO_SQL_TUNING_TASK SQL> select task_id,name,value from WRI$_ADV_PARAMETERS where task_id = 1; 7 注意事项 由于Automatic SQL Tuning Advisor是从AWR中识别 High-Load SQL,所以它不可能是实时地去工作。。。
|
11g新特性:SQL Management Base(SMB) |
在Oracle 11g,SMB是SPM的控制端,SMB是数据字典的一部分,SMB存储在sysaux表空间,SMB存储SQL语句日志,Plan Histories,以及SQL Profiles等,SMB允许每周清除一次未使用的SQL Plan & Log,SMB已经配置了自动存储空间管理。 1 Disk Space Usage SMB默认可以使用sysaux表空间的10%,SMB被允许使用sysaux的存储范围是1%-50%,每周有后台进程来测量SMB使用sysaux的空间,如果SMB超过了允许的范围,就会在al*.log中写入一条警告,可以通过dbms_spm的configure过程设置SMB允许使用存储空间的范围。 BEGIN DBMS_SPM.CONFIGURE('space_budget_percent', 30); END; / 2 Purging Policy 也可以通过dbms_spm的configure过程设置SMB清除策略: BEGIN DBMS_SPM.CONFIGURE('plan_retention_weeks', 105); END; / 3 SMB Configuration Parameters 可以通过DBA_SQL_MANAGEMENT_CONFIG视图来查看配置参数 select parameter_name, parameter_value from dba_sql_management_config; 4 创建stage表 BEGIN DBMS_SPM.CREATE_STGTAB_BASELINE(table_name => 'stage1'); END; / 5 打包需要导出的数据 DECLARE my_plans number; BEGIN my_plans := DBMS_SPM.PACK_STGTAB_BASELINE( table_name => 'stage1', enabled => 'yes', creator => 'dba1'); END; / 6 用exp或expdp导出stage表。 7 用imp或impdb导入stage表 8 把导出的SQL Plan Baselines导入字典中 DECLARE my_plans number; BEGIN my_plans := DBMS_SPM.UNPACK_STGTAB_BASELINE( table_name => 'stage1', fixed => 'yes'); END; / |
11g新特性:SQL Plan Management(SPM) | ||||||||||||||||||||||||||||||||||||||||||||||||||||
在11g,oracle提供dbms_spm包来管理SQL Plan,SPM是一个预防机制,它记录并评估sql的执行计划,将已知的高效的sql执行计划建立为SQL Plan Baselines,SQL Plan Baseline的功能是保持SQL的性能而不必关注系统的改变。 1 Capturing SQL Plan Baselines 在SQL Plan BaseLines捕获阶段,Oracle记录SQL的执行计划并检测该执行计划是否已经改变,如果SQL改变后的执行计划是安全的,则SQL就使用新的执行计划,因此,Oracle维护单个SQL执行计划的历史信息,Oracle维护的SQL执行计划的历史仅仅针对重复执行的SQL,SQL Plan Baseline可以手工load,也可以设置为自动捕获。 A Automatic Plan Capture 如果要激活自动的SQL Plan Capture,则需要设置OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES,该参数默认为False,如果设置为True,则表示海底捞月活自动捕获SQL Plan,则系统会自动创建并维护SQL Plan History,SQL Plan History包括优化器关注的:比如an execution plan, SQL text, outline, bind variables, and compilation environment。 B Manual Plan Loading 也可以手动装载一个存在的SQL Plan作为SQL Plan Baseline,手动装装的SQL Plan并不校验它的性能: --从SQL Tuning Set中装载: DECLARE my_plans pls_integer; BEGIN my_plans := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(sqlset_name => 'tset1'); END; / --从Cursor Cache中装载 DECLARE my_plans pls_integer; BEGIN my_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => '7qqnad1j615m7'); END; / 2 Selecting SQL Plan Baselines 在SQL Plan选择阶段,SQL每一次编绎,优化器使用基于成本的方式,建立一下best-cost的执行计划,然后去匹配SQL Plan Baselines中的SQL Plan,如果找到了匹配的SQL Plan,则会使用这个执行计划,如果没有找到匹配的SQL Plan,优化器就会去SQL Plan History中去搜索成本最低的SQL Plan,如果优化器在SQL Plan History中找不到任务匹配的SQL Plan,则该SQL Plan被作为一个Non-Accept Plan被存入SQL Plan History,新的SQL Plan直到它被验证不会引起一下性能问题才会被使用。 --如何激活使用SQL Plan Baselins SQL> alter system set OPTIMIZER_USE_SQL_PLAN_BASELINES = true; 3 Evolving SQL Plan Baselines 在SQL Plan Baselines的演变阶段,Oracle评估新的Plan的性能并将性能较好的Plan存放SQL Plan Baselines中,可以使用dbms_spm package的过程EVOLVE_SQL_PLAN_BASELINE将新的SQL Plan存入已经存在的SQL Plan Baselines中,新的Plan将会作为已经Accept Plan加入到SQL Plan Baselines中。 SET SERVEROUTPUT ON SET LONG 10000 DECLARE report clob; BEGIN report := DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(sql_handle => 'SYS_SQL_593bc74fca8e6738'); DBMS_OUTPUT.PUT_LINE(report); END; / 4 相关的数据字典 dba_sqlset_plans dba_advisor_sqlplans dba_sql_plan_baselines 5 用dbms_xplan显示SQL Plan 在11g中,Oracle增强了dbms_xplan包的显示功能,不仅可以显示单个sql的执行计划,还可以用来显示sql tuning set,以及sql plan baselines等,在此就仅仅对显示sql plan baselines做测试: select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle => '&SYS_SQL_',
|
相关文章推荐
- Oracle 11g 新特性简介
- 【原创】Oracle11g新特性DBMS_COMP…
- Oracle 11g新特性之 - 使用RMAN复制数据库
- Oracle 11g 新特性 -- Database Replay (重演) 说明
- Oracle 11g新特性direct path read引发的系统停运故障诊断处理2
- Oracle 11g r2分析函数新特性(二)分析函数LISTAGG
- Oracle 11g 新特性:Oracle11g 后台进程概述
- Oracle 11g新特性:Automatic Diagnostic Repository
- Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA) 说明
- ORACLE 11g的新特性,用户名密码错误延迟
- Oracle 11g 新特性 -- SQL Plan Management 示例
- Oracle 11g 新特性 -- Oracle Restart 说明
- Oracle 11g新特性
- Oracle 数据库 11g新特性:安全性
- Oracle 11g新特性点评
- oracle 11g 新特性 Flashback Data Archive 说明
- Oracle 11g 中 Direct path reads 特性 说明
- Oracle 11g 新特性简介
- Oracle 11g 新特性 -- ASM 增强 说明
- Invisible Index --Oracle 11g 新特性