Oracle固定执行计划的方法--outline、SQL Profile和SPM(绑定执行计划)

0    753    2

Tags:

👉 本文共约9089个字,系统预计阅读时间或需35分钟。

SQL概要(SQL Profile)

SQL Profile就是为某条SQL语句提供除了系统统计信息、对象(表和索引等)统计信息之外的其它信息,比如运行环境、额外的更准确的统计信息,以帮助优化器为SQL语句选择更适合的执行计划。SQL Profile可以说是Outline的进化。Outline能够实现的功能SQL Profile也完全能够实现,而SQL Profile具有Outline不具备的优化,最重要的有两点:①SQL Profile更容易生成、更改和控制。**②SQL Profile在对SQL语句的支持上做得更好,也就是适用范围更广。**

对于sqlprof_attr部分的数据可以使用脚本coe_xfr_sql_profile.sql脚本生成。

使用SQL Profile的两个目的:①锁定或者说是稳定执行计划。②在不能修改应用中的SQL的情况下使SQL语句按指定的执行计划运行。

SQL Profile最大的优点是在不修改SQL语句和会话执行环境的情况下去优化SQL的执行效率,适合无法在应用程序中修改SQL时。

SQL Profile对以下类型语句有效:

  • SELECT语句;

  • UPDATE语句;

  • INSERT语句(仅当使用SELECT子句时有效);

  • DELETE语句;

  • CREATE语句(仅当使用SELECT子句时有效);

  • MERGE语句(仅当作UPDATE和INSERT操作时有效)。

另外,使用SQL Profile还必须有CREATE ANY SQL PROFILE、DROP ANY SQL PROFILE和ALTER ANY SQL PROFILE等系统权限。

有两种生成SQL Profile的方法,分别是手动和采用STA来生成。

SQL Profile使用示例--手工创建SQL Profile

创建测试表,根据DBA_OBJECTS创建,OBJECT_ID上有索引

查看SQL默认执行计划,走了索引,通过指定Outline可以获取到系统为我们生成的hint

如果我们想让它走全表扫描,首先获取全表扫描HINT

可以看到全表扫描的Hint已经为我们生成了,我们选取必要的hint就OK了,其它的可以不要,使用SQL Profile

查看是否生效,已经生效了:

①、 coe_xfr_sql_profile.sql

使用coe_xfr_sql_profile.sql脚本生成sqlprof_attr数据

最麻烦的sqlprof_attr('FULL(t1@SEL$1)')是这里的格式如何写,在Mos上的文章note 215187.1中的sqlt.zip的目录utl中提供了脚本coe_xfr_sql_profile.sql可以生成这些信息。

1.建立测试表和数据

2.执行查询语句

执行原有的查询语句,查看执行计划发现走索引,实际上这时表中大部分行的OBJECT_ID都已经被更新为10,所以走索引是不合理的。

3.查询上面两个语句的SQL_ID、PLAN_HASH_VALUE

4.把coe_xfr_sql_profile.sql放在$ORACLE_HOME/rdbms/admin下,或者放在/tmp下都可以。

5.对上面的两个SQL产生outline data的sql.

6.替换文件coe_xfr_sql_profile_cpk9jsg2qt52r_3384190782.sql中的SYS.SQLPROF_ATTR部分,把它更改为coe_xfr_sql_profile_06c2mucgn6t5g_217508114.sql中产生的SYS.SQLPROF_ATTR部分,其中:

coe_xfr_sql_profile_cpk9jsg2qt52r_3384190782.sql的SYS.SQLPROF_ATTR:

coe_xfr_sql_profile_06c2mucgn6t5g_217508114.sql的SYS.SQLPROF_ATTR:

生成的文件在当前目录:

7.执行替换过SYS.SQLPROF_ATTR的SQL,coe_xfr_sql_profile_cpk9jsg2qt52r_3384190782.sql

SQL> @/tmp/coe_xfr_sql_profile_cpk9jsg2qt52r_3384190782.sql

8.查看产生的sql profile,此时原语句在不加hint的情况下也走全表扫了
select * from dba_sql_profiles;

9.验证SQL Profile是否生效

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复