阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

stored outlines迁移成SQL执行计划基线

109次阅读
没有评论

共计 15107 个字符,预计需要花费 38 分钟才能阅读完成。

stored outline 迁移
stored outline 是对 SQL 语句的一组 hint。hint 指示优化器对 SQL 语句选择一个特定的执行计划。stored outline 是一种遗留技术用于提供执行计划的稳定。

stored outline 迁移是用户将 stored outline 转换为 SQL 执行计划基线的处理过程。SQL 执行计划基线是一组能保证提供良好性能的执行计划。

stored outline 迁移的目的
 假设你依赖 stored outlines 来维护执行计划的稳定来阻止性能的下降。Oracle 提供了一种方便的方法来安全的将 stored outlines 转换成 SQL 执行计划基线。在转换后,可以与 stored outline 一样来维护执行计划的稳定。通过 SQL 执行计划基线可以使用更多先进的功能。

有以下问题需要解决:
 .stored outlines 不能随着时间而进行演进。因此 stored outline 在创建时性能良好,但是在数据库发生改变之后可能就变的性能很差。

.stored outline 中的 hints 可能会变为无效,例如,一个 index hint 所指定的索引被删除了。在这种情况下,数据库仍然会使用 outline,但不会排除无效索引,生成的执行计划通常比原始执行计划或由优化器所生成的当前执行计划性能要差。

. 对于一个 SQL 语句,优化器只能选择在当前指定目录中存储在 stored outline 中所定义的执行计划。优化器不能从不同目录中选择不同的 stored outline 或性能所有提高的当前执行计划。

.stored outlines 是一种被动的优化技术,它意味着你只能使用 stored outline 来解决已经出现的性能问题。例如,你可能创建一个 stored outline 来修正一个高负载 SQL 语句。在这种情况下,你可以使用 stored outline 在 SQL 语句变为高负载语句之前来代替主动对其进行优化。

stored outline 迁移 PL/SQL API 可以使用以下方式来解决以上问题:
 .SQL 执行计划基线能让优化器使用同样性能良好的执行计划并且会随着时间推移而进行演进。对于一个特定的 SQL 语句,可以在验证新执行计划不会影响性能之后将其添加到 SQL 执行计划基线中。

.SQL 执行计划基线会阻止因为无效 hint 而让执行计划性能变差。如果存储在执行计划中的 hint 变为无效,那么优化器将不能重复生成该执行计划。在这种情况下,优化器选择一种替代的可重复生成的执行计划基线或者由优化器生成当前成本最低的执行坟墓。

. 对于特定 SQL 语句,数据库可以维护多个执行计划基线。优化器会从一组性能良好的执行计划中选择。

stored outline 迁移操作
stored outline 迁移操作如下:
1. 用户调用一个函数指定要被迁移的 outline
 2. 数据库按照以下方式来处理 outline:
 a. 通过执行计划基线数据库从 outline 中复制所要的信息。数据库基于 outline 中的信息可以复制或计算。例如,在两个方案中存在的 SQL 语句文本,数据库可以从 outline 复制 SQL 文本到执行计划基线中。

b. 数据库为了获得 outline 中没有的信息需要重新解析 hint。plan hash 值与 plan cost 不能从 outline 中获得,它需要重新解析 hint。

c. 数据库创建执行计划基线。

3. 当数据库第一次执行相同 SQL 语句时选择 SQL 执行计划基线时就能获得丢失的信息。编译环境与执行统计信息只有在执行计划基线被解析与编译时才可以使用。

Outline 目录与基线模块
outline 是一组 hint, 而 SQL 执行计划基线是一组执行计划。因为它们是不同的技术,outline 的有些功能不会精确映射成执行计划基线的功能。例如,单个 SQL 语句可以有多个 outline,每一个属于不同的 outline 目录,但对于当前存在的执行计划基线只有一个目录 default。

outline 目录:对一组 stored outlines 指定分组。可以使用不同的目录来对 SQL 语句维护不同的 stored outline。例如,单个语句在 oltp 与 dw 目录中创建 outline。每个 stored outline 只能属于一个目录。一个语句可以有多个 outline 存储在不同目录中,但在每个目录中每个语句只能有一个 outline。在执行迁移时,数据库将每个 outline 目录映射为 SQL 执行计划基线的模块。缺省的目录名为 default

基线模块: 指定被执行的高级别函数。一个 SQL 执行计划基线只能属于一个模块。在 outline 被迁移到 SQL 执行计划基线后,模块名缺省值为 outline 目录名。

基线目录: 只能有一个 SQL 执行计划基线目录存在。这个基线目录叫 default。在执行 stored outline 迁移时,SQL 执行计划基线的模块名被设置为 stored outline 的目录名。在 default 目录中一个 SQL 语句可以有多个 SQL 执行计划基线。

当把 stored outline 迁移成 SQL 执行计划基线时,Oracle 数据库将使用相同的名称将每个 outline 目录映射成 SQL 执行计划基线模块。

dbms_spm 执行 stored outline 迁移
dbms_spm 包有以下函数用来执行 stored outline 迁移:
a.dbms_spm.migrate_stored_outline: 将现有 stored outline 迁移为 SQL 执行计划基线。可以使用以下格式来执行迁移:
 . 指定 outline 名称,SQL 文本,outline 目录或所有 stored outlines
 . 指定 outline 名称列表

b.dbms_spm.alter_sql_plan_baseline: 改变与 SQL 语句相关的单个或所有执行计划属性。

c.dbms_spm.drop_migrated_stored_outline:,删除已经补迁移为 SQL 执行计划基线的 stored outline。这个函数将找到 dba_outlines 中的 stored outline 并标记为 migrated,并且从数据库中删除这些 otulines。

与 stored outline 迁移相关的初始化参数:
 .create_stored_outlines: 决定 Oracle 数据库是否自动创建与存储 outline。

.optimizer_capture_sql_plan_baselines: 启用与禁用自动识可重复 SQL 语句并为这些 SQL 语句生成 SQL 执行计划基线。

.use_stored_outlines: 判断是否优化器使用 stored outline 来生成执行计划。

.optimizer_use_sql_plan_baselines: 启用与禁用存储在 SQL Management Base 中的 SQL 执行计划基线。

与 stored outline 迁移相关的视图
.dba_outlines: 描述数据库中的所有 stored outline。migrated 列对于 outline 迁移很重要并且它的值为 not-migrated 与 migrated。当为 migrated 时,stored outline 已经迁移为执行计划基线并且不能再使用。

.dba_sql_plan_baselines: 显示为特定 SQL 语句当前所创建的 SQL 执行计划基线。origin 列指示执行计划基线是怎么创建的。当值为 stored-outline 时指示执行计划基线是通过迁移 outline 而创建的。

stored outline 迁移的基本操作:
1.stored outline 迁移的准备操作:
检查迁移条件并且决定要迁移的执行计划基线的行为

2. 选择以下操作之一:
 . 使用 SQL 执行计划管理功能来迁移 outline
 . 当完全保留 stored outline 行为时迁移 outline 为执行计划基线

3. 执行迁移后的确认与清理

stored outline 迁移的准备操作
1. 使用 SQL*Plus 以 sysdba 权限或有 dbms_spm 执行权限的用户登录数据库
[oracle@db1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sat Oct 29 20:55:52 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

 

2. 查询数据库中的 stored outline
SQL> select name,category,sql_text from dba_outlines where migrated=’NOT-MIGRATED’;

no rows selected

 

3. 决定那个 stored outline 满足迁移条件:
 . 语句必须不是 insert as select 语句
. 语句必须没有引用远程对象
. 语句必须没有私有 stored outline

4. 决定是否迁移所有 outline,特定 stored outline 或者属于某个特定 outline 目录中的 outlines。如果不打算迁移所有 outline,那么就要列出你要迁移的 outline 或 outline 目录。

5. 决定 stored outline 被迁移成 SQL 执行计划基线时是使用固定执行计划还是非固定执行计划:
. 固定执行计划
 一个固定执行计划是冻结的。如果一个固定执行计划使用执行计划基线中的 hint 来重新生成,那么优化器总是选择成本最低的固定执行计划而不是那些不固定的执行计划基线。本质上,一个固定的执行计划基线实际是使用有效 hint 的 stored outline。当数据库基于执行计划基线中的 hint 并且使用执行计划基线中相同 plan hash 值来创建执行计划时,这个固定执行计划就能被重新生成。如果多个 hint 中的一个变为无效,那么数据库不可能使用相同的 plan hash 值来创建执行计划。在这种情装饰品下,这种执行不可重新生成。当使用 hint 解析时,如果一个固定的执行计划不能重新生成,那么优化器将选择不同的执行计划,它可能是:
 .SQL 执行计划基线中的另一个执行计划。
. 通过优化器重新生成执行计划

在有些情况下,因为不同的执行计划会出现性能差异,这时就需要进行 SQL 优化。

. 非固定执行计划
 如果执行计划基线没有包含固定的执行计划,那么 SQL Plan Management 将考虑为 SQL 语句选择一个等价的执行计划。

6. 在开始真下迁移之前,确保 Oracle 满足以下条件:
 . 数据库必须是企业版本
. 数据库必须是 open 且不能是暂停状态
. 数据库必须不能是限制模式来访问,只读或迁移模式

使用 SQL Plan Management 来迁移 outline
这个任务的目标是:
 . 为了允许 SQL Plan Management 来从执行计划基线中为一个 SQL 语句选择所有执行计划来代替在迁移后应用相同的固定执行计划。

. 为了允许 SQL 执行计划基线通过向基线中增加新的执行计划来面对数据库的改变

下面的例子假设以下条件成立:
 . 迁移所有 outline

. 想要执行计划基线的模块名与被迁移的 outline 目录名相同

. 不想 SQL 执行计划被固定
 缺省情况下,生成的执行计划是不固定的并且 SQL Plan Management 当为 SQL 语句选择执行计划时会考虑所有等价的执行计划。这个方法允许先进的执行计划演进可以为 SQL 语句捕获新的执行计划,验证它们的性能,并接受新执行计划加入到执行计划基线。

执行 dbms_spm.migrate_stored_outline 来迁移 stored outline
下面的例子执行 dbms_spm.migrate_stored_outline 来迁移所有 stored outline 为固定的执行计划基线:
declare
 my_report CLOB;
begin
 my_report:=dbms_spm.migrate_stored_outline(attribute_name=>’all’);
end;

迁移 outline 并保留 stored outline 行为
 这个任务的目标是为了把 stored outline 迁移成 SQL 执行计划基线并且通过创建固定执行计划基线来保留 stored outline 行为。一个固定执行计划比其它执行���划的优先级高。如果执行计划被固定,那么执行计划基线不能被演进。数据库不会向包含固定执行计划的基线增加新的执行计划。

这种情况适用于以下场景:
 . 想要迁移目录名为 firstrow 中的 stored outline
 . 想执行计划基线的模块名与被迁移的 outline 目录名相同

将 stored outline 迁移为执行计划基线:
1.
declare
 my_report CLOB;
begin
 my_outlines:=dbms_spm.migrate_stored_outline

(attribute_name=>’category’,attribute_value=>’firstrow’,fixed=>’YES’);
end;
/

在完成迁移操作之后,SQL 执行计划基线的模块名为 firstrow, 目录名为 default。

执行迁移后的确认与清理
 这个任务的目标是:
 . 为了配置数据库使用执行计划基线来代替使用那些已经被迁移为 SQL 执行计划基线的 stored outline
 . 为了将来执行的 SQL 语句创建 SQL 执行计划基线来代替使用 stored outline
 . 为了删除那些已经迁移为 SQL 执行计划基线的 stored outline

这个任务适用于以下场景:
 . 已经完成了 stored outline 迁移的基本步骤
. 一些 stored outline 可能是在 oracle 10g 之前被创建

下面说明 optimizer_capture_sql_plan_baselines 与 create_stored_outlines 参数的组合是如何决定数据库创建 stored outline 与 SQL 执行计划基线的:
create_stored_outlines 为 false,optimizer_capture_sql_plan_baselines 为 false 时,当执行 SQL 语句时,数据库不会创建 stored outline 或 SQL 执行计划基线。

create_stored_outlines 为 false,optimizer_capture_sql_plan_baselines 为 true 时, 数据库会自动识别重复的 SQL 语句并为这些语句生成 SQL 执行计划基线。当执行 SQL 语句时,如果不存在 SQL 执行计划基线就会使用 default 目录名来生成新的 SQL 执行计划基线。

create_stored_outlines 为 true,optimizer_capture_sql_plan_baselines 为 false 时,Oracle 数据库会自动创建与存储 outline。当执行 SQL 语句时,如果不存在 outline, 就会使用目录名 default 为 SQL 语句创建 outline。

create_stored_outlines 为 category,optimizer_capture_sql_plan_baselines 为 false 时, 当执行 SQL 语句时,如果不存在 outline,就会使用指定的目录名为 SQL 语句创建新的 stored outlines。

create_stored_outlines 为 true,optimizer_capture_sql_plan_baselines 为 true 时,Oracle 数据库会自动为执行的每个查询语句创建与存储 outline。自动识别重复 SQL 语句与为这些语句生成 SQL 执行计划基线。当执行 SQL 语句时,数据库会使用目录名 default 来创建 stored outline 与 SQL 执行计划基线。

create_stored_outlines 为 category,optimizer_capture_sql_plan_baselines 为 true,Oracle 数据库会自动为执行的每个查询语句创建 outline。自动识别重复 SQL 语句与为这些语句生成 SQL 执行计划基线。当执行 SQL 语句时,数据库会使用指定的目录名创建 stored outline 并使用目录名 default 来创建 SQL 执行计划基线。

下面说明 optimizer_use_sql_plan_baselines 与 use_stored_outlines 参数的组合是如何决定数据库使用 stored outline 与 SQL 执行计划基线的:

use_stored_outlines 为 false,optimizer_use_sql_plan_baselines 为 false 时,当为 SQL 语句选择执行计划时,数据库不会使用 stored outline 或执行计划基线。

use_stored_outlines 为 false,optimizer_use_sql_plan_baselines 为 true 时,当为 SQL 语句选择执行计划时,数据库只会使用 SQL 执行计划基线。

use_stored_outlines 为 true,optimizer_use_sql_plan_baselines 为 false 时,当为 SQL 语句选择执行计划时,数据库会使用目录名为 default 中的 stored outline。

use_stored_outlines 为 category,optimizer_use_sql_plan_baselines 为 false 时,当为 SQL 语句选择执行计划时,数据库会使用指定目录名中的 stored outline。如果指定的目录名中不存在 stored outline,如果在 default 目录中存在 stored outline,那么数据库就会使用。

use_stored_outlines 为 true,optimizer_use_sql_plan_baselines 为 true 时,当为 SQL 语句选择执行计划时,stored outline 的优先级比 SQL 执行计划基线高。如果在 default 目录中存在可以用于 SQL 语句的 stored outline,那么数据库会使用 stored outline,否则数据库使用 SQL 执行计划基线。

use_stored_outlines 为 category,optimizer_use_sql_plan_baselines 为 true 时,当为 SQL 语句选择执行计划时,stored outline 的优先级比 SQL 执行计划基线高。如果指定目录或 default 目录中存在可以用于 SQL 语句的 stored outline,那么数据库会使用 stored outline。否则,数据库会使用 SQL 执行计划基线。然而,如果 stored outline 有 migrated 属性,那么数据库不会使用 outline,如果存在 SQL 执行计划基线,那么数据库会使用 SQL 执行计划基线。

在完成 stored outline 迁移后将数据库置于合适的状态:
1. 检查迁移结果,看 SQL 执行计划基线是否已经创建, 确保执行计划被启用与接受:
SQL> select sql_handle,plan_name,origin,enabled,accepted,fixed,module from dba_sql_plan_baselines;
SQL_HANDLE                    PLAN_NAME                      ORIGIN        ENABLED ACCEPTED FIXED MODULE
—————————— —————————— ————– ——- ——– —– ——————————–
SQL_d0cb53f0573bcb74          SQL_PLAN_d1kumy1bmrkvnae69e7ae AUTO-CAPTURE  YES    YES      NO    emagent_SQL_oracle_database
SQL_9c0d7998b1d28680          SQL_PLAN_9s3btm2sx51n074830d3a AUTO-CAPTURE  YES    YES      NO    PL/SQL Developer
SQL_91430157076ba9df          SQL_PLAN_92hs1aw3qrafzb96d21b9 AUTO-CAPTURE  YES    YES      NO    JDBC Thin Client
SQL_fbd80d3a7daa592f          SQL_PLAN_grq0d79yunq9g3517892f AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_c9327c795e035d87          SQL_PLAN_ckcmwg5g06rc70298c760 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_773b254f11d733b0          SQL_PLAN_7fft59w8xfcxh7d2358ba AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_952e0dafe13297d3          SQL_PLAN_9abhdpzhm55ymff175d6b AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_5bea1aec47de5c1d          SQL_PLAN_5ruhuxj3xwr0x3517892f AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_11489cc82e27c733          SQL_PLAN_12k4wt0r2gjtmf1c17b40 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_da9311fb2fec8c40          SQL_PLAN_dp4sjzcryt320849be660 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_2097b7cb694841d0          SQL_PLAN_215xrtdnnhhfh35e87e58 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_df059c6821f89598          SQL_PLAN_dy1cwd0hzj5cs35e87e58 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_rac_database
SQL_94a4564ac1318120          SQL_PLAN_9992q9b0m30902f8b24ae AUTO-CAPTURE  YES    YES      NO   
SQL_fc093754bbae13fe          SQL_PLAN_gs29rakxuw4zy37db554f AUTO-CAPTURE  YES    YES      NO   
SQL_2fd9b3dc9d848e02          SQL_PLAN_2zqdmvkfs93h25179cde9 AUTO-CAPTURE  YES    YES      NO   
SQL_73b82c249b7d0843          SQL_PLAN_77f1c4kdru223ebdc4e78 AUTO-CAPTURE  YES    YES      NO   
SQL_6184e8ed31386bf0          SQL_PLAN_63178xnsmhuzh561aa499 AUTO-CAPTURE  YES    YES      NO   
SQL_c42198d1d5f324f5          SQL_PLAN_c88csu7az697pebdc4e78 AUTO-CAPTURE  YES    YES      NO   
SQL_674112d2daaadf76          SQL_PLAN_6fh8kubdaprvq83c346df AUTO-CAPTURE  YES    YES      NO   
SQL_ffa1f1f91c5bca64          SQL_PLAN_gz8gjz4f5rkm4f59a06ad AUTO-CAPTURE  YES    YES      NO
SQL_af180c8ff9a1d861          SQL_PLAN_ay60cjzwu3q3182cd7aee AUTO-CAPTURE  YES    YES      NO   
SQL_3ba02daa5cc73416          SQL_PLAN_3r81dp9fcfd0q94b64494 AUTO-CAPTURE  YES    YES      NO   
SQL_9cc94d4239925ef4          SQL_PLAN_9tkad88wt4rrn5976b5eb AUTO-CAPTURE  YES    YES      NO   
SQL_1dc6cbd35acb4efd          SQL_PLAN_1vjqbuddcqmrx5d4b54d5 AUTO-CAPTURE  YES    YES      NO   
SQL_9ed410d70ee4f2fe          SQL_PLAN_9xp0huw7f9wry2f8b24ae AUTO-CAPTURE  YES    YES      NO   
SQL_f7a25d7938972912          SQL_PLAN_gg8kxg4w9fa8kebdc4e78 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_90cda4f1c4064ca9          SQL_PLAN_91md4y720cm5924d38443 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_c42ff7e665ca18ec          SQL_PLAN_c8bzrwtkwn67c55df0880 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_a56d8c52cbac8dc5          SQL_PLAN_aavccab5ut3f5a9b3d668 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_35a61a655e37564d          SQL_PLAN_3b9hucpg3fpkd5454b1ea AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_ac3326a11f142cac          SQL_PLAN_asct6n4gj8b5c76def5aa AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_581db5ae5093f1d2          SQL_PLAN_5h7dppt897wfk15aad75e AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_2531d59ec295a26c          SQL_PLAN_2acfpmv19b8mc6943321d AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_09070338bc78471e          SQL_PLAN_0k1s372y7hjsyebdc4e78 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_8bd89c2a8626630d          SQL_PLAN_8rq4w5a32cssdd7a28287 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_c99cfd0ca0ec6d27          SQL_PLAN_cm77x1khfsv97e0d1d869 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_1178b3f40ee9079d          SQL_PLAN_12y5myh7fk1wx7fa68824 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_30c826839bd031c7          SQL_PLAN_31k16hfdx0cf7ebdc4e78 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_75642813e87d55ba          SQL_PLAN_7at182gn7upduc9e4a408 AUTO-CAPTURE  YES    NO      NO    SEVERITY EVALUATION
SQL_75642813e87d55ba          SQL_PLAN_7at182gn7updu4d0fe611 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_0398f5dac9a26bd2          SQL_PLAN_0767pvb4u4uykaa9fb8f2 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_5bf2fdd320991dc8          SQL_PLAN_5rwrxuch9k7f815aad75e AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_faff45acb48c010c          SQL_PLAN_gpzu5pku8s08c3b4f0583 AUTO-CAPTURE  YES    NO      NO    SEVERITY EVALUATION
SQL_faff45acb48c010c          SQL_PLAN_gpzu5pku8s08c0a771b57 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_0edbf315864797cd          SQL_PLAN_0xqzm2q34g5ydf06d473d AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_6807bab99db0361a          SQL_PLAN_6h1xur6fv0dhu2e8a86b7 AUTO-CAPTURE  YES    YES      NO    PL/SQL Developer
SQL_1a45242d50349a41          SQL_PLAN_1nj945p8396k1c9e4a408 AUTO-CAPTURE  YES    NO      NO    SEVERITY EVALUATION
SQL_1a45242d50349a41          SQL_PLAN_1nj945p8396k14d0fe611 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_4c66704928a28228          SQL_PLAN_4stmh94na50j86943321d AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_7757ffeb83333a7e          SQL_PLAN_7fpzzxf1m6fmy68d74995 AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_17c90a44687b6622          SQL_PLAN_1gk8a8jn7qtj26943321d AUTO-CAPTURE  YES    YES      NO    SEVERITY EVALUATION
SQL_6d5efcdbb0af4493          SQL_PLAN_6urrwvfsayj4m4efadb75 AUTO-CAPTURE  YES    YES      NO   
SQL_2c0bedfc971b5441          SQL_PLAN_2s2zdzkbjqp212f8b24ae AUTO-CAPTURE  YES    YES      NO    OEM.BoundedPool
SQL_fc7e68bc886477c5          SQL_PLAN_gszm8rk468xy5f4b84801 AUTO-CAPTURE  YES    YES      NO    OEM.BoundedPool
SQL_9425c7639bc97782          SQL_PLAN_989f7cfdwkxw245768591 AUTO-CAPTURE  YES    YES      NO    OEM.BoundedPool
SQL_1205bbc63c6b2eeb          SQL_PLAN_141dvssy6qbrb47a21cb4 AUTO-CAPTURE  YES    YES      NO    OEM.BoundedPool
SQL_1367e948428a55f2          SQL_PLAN_16tz99118npgk7a54464c AUTO-CAPTURE  YES    YES      NO    emagent_SQL_oracle_database
SQL_a47e7f9f186b16f8          SQL_PLAN_a8zmzmwc6q5rs799d6e65 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_oracle_database
SQL_03d675f2172c4dff          SQL_PLAN_07pmpy8bksmgz6d032274 AUTO-CAPTURE  YES    YES      NO    emagent_SQL_oracle_database
59 rows selected

2. 可选操作,修改 SQL 执行计划基线的属性。例如,下面的语句将修改特定 SQL 语句的执行计划基线为 fixed:
SQL> declare
  2  v_cnt PLS_INTEGER;
  3  begin
  4  v_cnt:=dbms_spm.alter_sql_plan_baseline(
  5                          sql_handle=>’SQL_9c0d7998b1d28680′,
  6                          attribute_name=>’FIXED’,
  7                          attribute_value=>’YES’);
  8  dbms_output.put_line(‘Plans altered: ‘|| v_cnt);
  9  end;
 10  /
PL/SQL procedure successfully completed

3. 检查原 stored outline 的状态:
select name,owner,category,used,migrated from dba_outlines;

4. 删除那些已经被迁移到 SQL 执行计划基线中的所有 stored outline,下面的语将用来删除 dba_outlines 中状态为 migrated 的所有 stored outline:
declare
 v_cnt PLS_INTEGER;
begin
 v_cnt:=dbms_spm.drop_migrated_stored_outline();
 dbms_output.put_line(‘Migrated stored outlines dropped: ‘|| v_cnt);
end;

5. 设置初始化参数:
 . 当执行 SQL 语句时,数据库创建 SQL 执行计划基线但不创建 stored outline
 . 当不存在等价的 SQL 执行计划基线时,数据库只使用 stored outline

下面的例子,当执行 SQL 语句时,指示数据库创建 SQL 执行计划基线来代替 stored outline。并且指示

数据库当目录 allrows 或 default 中的没有被迁移到 SQL 执行计划基线中的 stored outline。否则数据

库只使用 SQL 执行计划基线。
alter system set create_stored_outline = false;
 alter system set optimizer_capture_sql_plan_baselines = true;
 alter system set optimizer_use_sql_plan_baselines = true;
 alter session set use_stored_outlines = allrows;

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/136635.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计15107字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中