is916ena3量产工具-(is917量产工具)

电脑教程 次浏览手机阅读
(is917量产工具) SPM简介

SPM有助于保持特征SQL只允许执行能提高句子性能的执行计划。SPM类似但不同STORED OUTLINES。SPM目的是稳定SQL句子执行计划,STORED OUTLINES是冻结SQL句子执行计划,而SPM只要能改进,就允许选择新的执行计划SQL语句的性能,我们需要SPM原因可能包括:

①新版本的Oracle(新的优化器版本-使用捕获和回放来测试影响);

②优化器统计信息或数据的变化;

③SCHEMA、应用程序或元数据的变化(使用SQL顾问的建议);

④更改系统设置(使用数据库回放);

⑤SQL配置文件(SQL Profile)创建(数据倾斜和相关列的统计信息)。

Oracle开发优化器辅助手段

Oracle 8:HINT

Oracle 8&9: STORED OUTLINES

Oracle 10: SQL PROFILE

Oracle 11: SPM(SQL Plan Management)

Oracle 12:自适应计划

SPM 实施计划的自动管理

建立 Baseline 基线(集合有效执行计划,包括一个或多个执行计划集合) baseline 优化器将使用执行计划。

当应用环境发生变化时,可以通过 baseline 选择更好的执行计划,稳定 sql 执行计划。

当应用环境发生变化时,可以通过 baseline 选择更好的执行计划,稳定 sql 执行计划。

稳定执行计划的方法:

hints、store outline、sql profile 为不随数据变化而变化的执行计划提供了单一的稳定方法。

可选择的:SPM只要改进,就允许选择新的执行计划sql性能便可。

SPM在捕获计划基线时,分为自动捕获和手动导入。自动捕获

SQL> show parameter optimizer_use NAME TYPE VALUE------------------------------------ ----------- ------------------------------optimizer_use_invisible_indexes boolean FALSEoptimizer_use_pending_statistics boolean FALSEoptimizer_use_sql_plan_baselines boolean TRUE 使用为trueSQL> show parameter optimizer_captureNAME TYPE VALUE------------------------------------ ----------- ------------------------------optimizer_capture_sql_plan_baselines boolean FALSE 自动捕获为false

创建测试表SQL> create table test as select object_id,object_name from dba_objects;Table created.查看当前的baseline情况SQL> select plan_name,sql_handle,enabled,accepted,fixed,module,sql_text from dba_sql_plan_baselines;no rows selecte会话级别启动spm捕获设置在系统或会话级别OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES为trueSQL> alter session set OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=true;SQL> select object_id,object_name from test where object_id='18';SQL> 电脑 select object_id,object_name from test where object_id='18';SQL> alter session set OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=false;查看自动捕获baseline信息select plan_name,sql_handle,enabled,accepted,fixed,module,sql_text from dba_sql_plan_baselinesSQL> /PLAN_NAME SQL_HANDLE ENA ACC FIX MODULE SQL_TEXT-------------------------------------------------- ------------------------------ --- --- --- -------------------- --------------------------------------------------------------------------------SQL_PLAN_ccs5bvy606pgh97bbe3d0 SQL_c660abdf8c0355f0 YES YES NO SQL*Plus select object_id,object_name from test where object_id='18'注意:enabled为yes,accepted为yes,fixed为NO。另外,SQL*Plus添加此计划的模块。SPM对执行计划的控制可以通过几个标记来实现:Enabled (控制活动): YES (活动的,但不一定会使用) NO (可理解为被标记删除)Accepted(控制使用): YES (只有 “Enabled” 并且“Accepted” 选择使用计划) NO (如果是“Enabled” 电脑 那么只有被evolve成“Accepted才有可能被执)Fixed(控制优先级): YES (如果是“Enabled”并且“Accepted”,该计划将优先考虑,该计划将被视为不需要更改) NO (不需要优先考虑普通计划)Reproduced(有效性): YES (优化器可以使用此计划) NO (计划无效,如索引删除) 启用 在计划历史或计划基线中执行计划状态的默认值。 enable 接收 在被认为可用之前,计划需要被接受。 enable 接收 在被认为可用之前,计划需要被接受。 accept 固定 该计划优于其他计划。fix此时检查执行计划SQL> explain plan for select object_id,object_name from test where object_id='18';Explained.SQL> select * from table(dbms_xplan.display());PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Plan hash value: 1357081020--------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------电脑-| 0 | SELECT STATEMENT | | 1 | 39 | 123 (1)| 00:00:01 ||* 1 | TABLE ACCESS FULL| TEST | 1 | 39 | 123 (1)| 00:00:01 |--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------PLAN_TABLE_OUTPUT-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 - filter("OBJECT_ID"=18)Note----- - SQL plan baseline "SQL_PLAN_ccs5bvy606pgh97bbe3d0" used for this statement17 rows selected.

SQL_PLAN_ccs5bvy606pgh97bbe3d0 自动生成baseline,优化器选择此执行计划sql执行。

为此创建索引,再次执行捕获SQL> create index test_idx on test(object_id);Index created.SQL> alter session set OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=true;Session altered.SQL> select object_id,object_name from test where object_id='18'; OBJECT_ID OBJECT_NAME---------- --------------------------------------------------------------------------------------------------------------------------------18 OBJ$SQL> / OBJECT_ID OBJECT_NAME---------- --------------------------------------------------------------------------------------------------------------------------------18 OBJ$SQL> select plan_name,sql_handle,enabled,accepted,fixed,module,sql_text from dba _s


电脑
喜欢 ()