ITPub博客

首页 > 数据库 > 数据库开发技术 > Oracle SQL 性能调优:使用SqlPatch固定执行计划(二)19c

Oracle SQL 性能调优:使用SqlPatch固定执行计划(二)19c

原创 数据库开发技术 作者:lukeunique 时间:2021-04-14 08:28:41 0 删除 编辑

编者按:

本文作者系Scott(中文名陈晓辉),现任大连华信资深分析师 ,ORACLE数据库专家,曾就职于甲骨文中国。个人主页:segmentfault.com/u/db_perf ,经其本人授权发布。


【免责声明】本公众号文章仅代表个人观点,与任何公司无关。

今天在19c上又做了一次SqlPatch,发现上次写的在11gR2的方法总是报错,于是又看了19c的Online Documents。更新了一下SqlPatch的做成方法。

Oracle SQL 性能调优:使用SqlPatch固定执行计划(一)

  1. 做成TEST用户和Table,Index。

 SQL> grant connect,resource,unlimited tablespace to test3 identified by test3;

権限付与が成功しました。

SQL> grant administer sql management object to test3;

権限付与が成功しました。

SQL> conn test3/test3@localhost:1521/pdb
接続されました。
SQL> create table tab2(c1 number, c2 number, c3 varchar2(10));

表が作成されました。

SQL> declare
a number;
begin
a := 1;
for i in 1 .. 50 loop
for j in 1 .. 100 loop
insert into tab2 values(a,j,'a');
commit;
a := a+1;
end loop;
end loop;
end;
/

PL/SQLプロシージャが正常に完了しました。

SQL> create index ind2_2 on tab2(c2);

索引が作成されました。

2. 做成SQLPATCH。

SQL> var cnt varchar2(200);
SQL> exec :cnt := DBMS_SQLDIAG.CREATE_SQL_PATCH (sql_text => TO_CLOB('select * from tab2 where c2=1'),hint_text => TO_CLOB('INDEX_RS_ASC(@"SEL$1" "TAB2"@"SEL$1" ("TAB2"."C2"))'));

PL/SQLプロシージャが正常に完了しました。
  1. 验证SQLPATCH。

SQL> set autot traceonly exp
SQL> set lin 120 pages 999
SQL> select * from tab2 where c2=1;

実行計画
----------------------------------------------------------

Plan hash value: 616764305

----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT||50 | 1650 |11 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TAB2 |50 | 1650 |11 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND2_2 |50 | | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------


Predicate Information (identified by operation id):
---------------------------------------------------


2 - access("C2"=1)

Note
-----

- dynamic statistics used: dynamic sampling (level=2)
- SQL patch "SYS_SQLPTCH_0178349b7d430005" used for this statement

后续文章更加精彩,欢迎关注本公众号或访问【阅读原文】。

——End——


专注于技术不限于技术!

用碎片化的时间,一点一滴地提高数据库技术和个人能力。

欢迎关注!



手把手系列(帮助个人技术成长):

SQL调优和诊断从哪入手?

获取SQL执行计划最基础的方法是啥?

一学就会的获取SQL执行计划和性能统计信息的方法

在线Oracle SQL学习环境--Live SQL

Oracle优化器架构变化和特定行为

获取历史执行计划:AWR/StatsPack SQL 报告

供收藏:Oracle固定SQL执行计划的方法总结
Oracle SQL 性能调优:使用Hint固定执行计划1(Hash Join)

Oracle SQL 性能调优:使用SqlPatch固定执行计划


原文作者:SQL和数据库技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-07-21

  • 博文量
    107
  • 访问量
    63572