2013-02-05 16:19:36

标签:oracle sql profile
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。

使用sql profile固定执行计划实验

10g之前有outlines,10g之后sql profile作为新特性之一出现。

如果针对非绑定变量的sql,outlines则力不从心。

下面是实验过程


  1. --1.准备阶段
  2. SQL> select*fromv$version;
  3. BANNER
  4. ----------------------------------------------------------------
  5. Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Prod
  6. PL/SQL Release 10.2.0.1.0 - Production
  7. CORE    10.2.0.1.0      Production
  8. TNS for32-bitWindows: Version 10.2.0.1.0 - Production
  9. NLSRTL Version 10.2.0.1.0 - Production
  10. SQL> createtabletest_raugherasselect*fromdba_objects;
  11. 表已创建。
  12. SQL> createindexind_objectidontest_raugher(object_id);
  13. 索引已创建。
  14. SQL> selectobject_idfromtest_raugherwhererownum<2;
  15. OBJECT_ID
  16. ----------
  17. 20
  18. SQL> execdbms_stats.gather_table_stats(user,'TEST_RAUGHER',cascade=>true);
  19. PL/SQL 过程已成功完成。
  20. --原sql执行计划
  21. SQL> setautot trace explain
  22. SQL> select*fromtest_raugherwhereobject_id=20;
  23. 执行计划
  24. ----------------------------------------------------------
  25. Plan hash value: 800879874
  26. --------------------------------------------------------------------------------------------
  27. | Id  | Operation                   | Name|Rows| Bytes | Cost (%CPU)|Time|
  28. --------------------------------------------------------------------------------------------
  29. |   0 | SELECTSTATEMENT            |              |     1 |    95 |     2   (0)| 00:00:01 |
  30. |   1 |  TABLEACCESSBYINDEXROWID| TEST_RAUGHER |     1 |    95 |     2   (0)| 00:00:01 |
  31. |*  2 |   INDEXRANGE SCAN          | IND_OBJECTID |     1 |       |     1   (0)| 00:00:01 |
  32. --------------------------------------------------------------------------------------------
  33. Predicate Information (identified byoperation id):
  34. ---------------------------------------------------
  35. 2 - access("OBJECT_ID"=20)
  36. SQL>
  37. --新sql执行计划
  38. SQL> select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20;
  39. 执行计划
  40. ----------------------------------------------------------
  41. Plan hash value: 3725671026
  42. ----------------------------------------------------------------------------------
  43. | Id  | Operation         | Name|Rows| Bytes | Cost (%CPU)|Time|
  44. ----------------------------------------------------------------------------------
  45. |   0 | SELECTSTATEMENT  |              |     1 |    95 |   166   (2)| 00:00:02 |
  46. |*  1 |  TABLEACCESSFULL| TEST_RAUGHER |     1 |    95 |   166   (2)| 00:00:02 |
  47. ----------------------------------------------------------------------------------
  48. Predicate Information (identified byoperation id):
  49. ---------------------------------------------------
  50. 1 - filter("OBJECT_ID"=20)
  51. --2.获取新sql的sql_id
  52. SQL> col sql_id fora20
  53. SQL> col sql_text fora100
  54. SQL> selectsql_id,sql_textfromv$sqlwheresql_textlike'%full(test_raugher)%';
  55. SQL_ID               SQL_TEXT
  56. -------------------- ----------------------------------------------------------------------------------------------------
  57. 5nkhk378705z3        selectsql_id,sql_textfromv$sqlwheresql_textlike'%full(test_raugher)%'
  58. g23hbdmcsdahc        select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20
  59. dqp79vx5pmw0k        EXPLAIN PLAN SETSTATEMENT_ID='PLUS4294967295'FORselect/*+full(test_raugher) */ *fromtest_raug
  60. her whereobject_id=20
  61. --3.获取新sql的outline
  62. SQL> setpagesize 1000
  63. SQL> select*fromtable(dbms_xplan.display_cursor('g23hbdmcsdahc',null,'outline'));
  64. PLAN_TABLE_OUTPUT
  65. -----------------------------------------------------------------------------------------------
  66. -----------------------------------------------------------------------------------------------
  67. SQL_ID  g23hbdmcsdahc, child number 0
  68. -------------------------------------
  69. select/*+full(test_raugher) */ *fromtest_raugherwhereobject_id=20
  70. Plan hash value: 3725671026
  71. ----------------------------------------------------------------------------------
  72. | Id  | Operation         | Name|Rows| Bytes | Cost (%CPU)|Time|
  73. ----------------------------------------------------------------------------------
  74. |   0 | SELECTSTATEMENT  |              |       |       |   166 (100)|          |
  75. |*  1 |  TABLEACCESSFULL| TEST_RAUGHER |     1 |    95 |   166   (2)| 00:00:02 |
  76. ----------------------------------------------------------------------------------
  77. Outline Data
  78. -------------
  79. /*+
  80. BEGIN_OUTLINE_DATA
  81. IGNORE_OPTIM_EMBEDDED_HINTS
  82. OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
  83. ALL_ROWS
  84. OUTLINE_LEAF(@"SEL$1")
  85. FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")
  86. END_OUTLINE_DATA
  87. */
  88. Predicate Information (identified byoperation id):
  89. ---------------------------------------------------
  90. 1 - filter("OBJECT_ID"=20)
  91. 已选择31行。
  92. --4.创建sql profile(SQLPROFILE_001)
  93. SQL> declare
  94. 2   v_hints sys.sqlprof_attr;
  95. 3   begin
  96. 4   v_hints:=sys.sqlprof_attr(
  97. 5      'BEGIN_OUTLINE_DATA',
  98. 6     'IGNORE_OPTIM_EMBEDDED_HINTS',
  99. 7     'OPTIMIZER_FEATURES_ENABLE(''10.2.0.1'')',
  100. 8     'ALL_ROWS',
  101. 9     'OUTLINE_LEAF(@"SEL$1")',
  102. 10     'FULL(@"SEL$1" "TEST_RAUGHER"@"SEL$1")',
  103. 11     'END_OUTLINE_DATA');
  104. 12   dbms_sqltune.import_sql_profile(
  105. 13     'select * from test_raugher where object_id=20',
  106. 14     v_hints,'SQLPROFILE_001',
  107. 15     force_match=>true,replace=>false);
  108. 16  end;
  109. 17  /
  110. PL/SQL 过程已成功完成。
  111. --5.查看是否使用sql profile
  112. SQL> setautot trace explain
  113. SQL> select*fromtest_raugherwhereobject_id=20;
  114. 执行计划
  115. ----------------------------------------------------------
  116. Plan hash value: 3725671026
  117. ----------------------------------------------------------------------------------
  118. | Id  | Operation         | Name|Rows| Bytes | Cost (%CPU)|Time|
  119. ----------------------------------------------------------------------------------
  120. |   0 | SELECTSTATEMENT  |              |     1 |    95 |   166   (2)| 00:00:02 |
  121. |*  1 |  TABLEACCESSFULL| TEST_RAUGHER |     1 |    95 |   166   (2)| 00:00:02 |
  122. ----------------------------------------------------------------------------------
  123. Predicate Information (identified byoperation id):
  124. ---------------------------------------------------
  125. 1 - filter("OBJECT_ID"=20)
  126. Note
  127. -----
  128. - SQL profile "SQLPROFILE_001"usedforthis statement
  129. SQL> select*fromtest_raugherwhereobject_id=200;
  130. 执行计划
  131. ----------------------------------------------------------
  132. Plan hash value: 3725671026
  133. ----------------------------------------------------------------------------------
  134. | Id  | Operation         | Name|Rows| Bytes | Cost (%CPU)|Time|
  135. ----------------------------------------------------------------------------------
  136. |   0 | SELECTSTATEMENT  |              |     1 |    95 |   166   (2)| 00:00:02 |
  137. |*  1 |  TABLEACCESSFULL| TEST_RAUGHER |     1 |    95 |   166   (2)| 00:00:02 |
  138. ----------------------------------------------------------------------------------
  139. Predicate Information (identified byoperation id):
  140. ---------------------------------------------------
  141. 1 - filter("OBJECT_ID"=200)
  142. Note
  143. -----
  144. - SQL profile "SQLPROFILE_001"usedforthis statement

创建sql profile


  1. DBMS_SQLTUNE.IMPORT_SQL_PROFILE(
  2. sql_text => 'FULL QUERY TEXT',
  3. profile => sqlprof_attr('HINT SPECIFICATION WITH FULL OBJECT ALIASES'),
  4. name=>'PROFILE NAME',
  5. force_match => TRUE/FALSE,
  6. replace=>TRUE/FALSE);
sql_text用于指定sql的全文本,可查询V$SQLAREA.SQL_FULLTEXT或DBA_HIST_SQLTEXT.SQL_TEXT获得。 

删除sql proflie


  1. BEGIN
  2. DBMS_SQLTUNE.DROP_SQL_PROFILE(name=>'PROFILE NAME');
  3. END;
  4. /

sql profile相关视图


  1. SELECTname, created,category,sql_Textfromdba_sql_profilesORDERBYcreatedDESC;
  2. SELECTsql_attr.attr_val outline_hints
  3. FROMdba_sql_profiles sql_profiles, sys.SQLPROF$ATTR sql_attr
  4. WHEREsql_profiles.signature = sql_attr.signature
  5. ANDsql_profiles.name='SQLPROFILE_001'
  6. ORDERBYsql_attr.attr#ASC;

使用oracle sql profile固定执行计划相关推荐

  1. 利用sql profile固定执行计划加快OGG同步

    ogg是逻辑同步,不想ADG利用后镜像直接修改block中的内容,ogg是根据redo片中SQL,以及SQL对应的后镜像值进行表的修改,这样如果大表上面没有索引,或者走错索引就会导致同步慢.但是OGG ...

  2. oracle数据库通过SQL profile 绑定SQL最优执行计划(个人实践)

    1.执行SQL语句,同时使用如下命令查找SQL ID select a.SQL_ID,b.SQL_TEXT,b.LAST_LOAD_TIME,b.LAST_ACTIVE_TIME   from v$s ...

  3. SQL BASELINE修改固定执行计划

    SQL BASELINE修改固定执行计划 2011-06-10 12:50:51 分类: Linux http://www.itpub.net/thread-1445125-1-1.html http ...

  4. PostgreSQL SQL OUTLINE插件sr_plan (保存、篡改、固定 执行计划)

    标签 PostgreSQL , sql plan outline , 执行计划篡改 , query rewrite , sr_plan , pg plan hint 背景 功能较为强大的数据库,通常都 ...

  5. 熊军 oracle 迁移 spm,Oracle ---- 固定执行计划之SPM

    今天终于说到了SPM,一个ORACLE官方推荐使用的SQL执行计划固定方法.为什么最常使用的方法最后说呢?因为介绍SPM使用方法的公开资料最多,ORACLE提供的接口也最丰富,用一篇几百字的小文进行说 ...

  6. oracle++spm,ORACLE 11G 使用SPM来调整SQL语句的执行计划

    跟大家说明一下: ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的. 最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的 ...

  7. 使用SPM固定执行计划

    作者:闫彬彬 原文来源: https://tidb.net/blog/83b454f1 [是否原创]是 [首发渠道]TiDB 社区 [正文] 1 前言 错误的SQL执行计划是生产系统中经常碰到的问题, ...

  8. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

  9. 【Oracle】看懂执行计划之基于规则的优化器(RBO)

    [Oracle]看懂执行计划之基于规则的优化器(RBO) 简介   基于规则的优化器(RBO)是通过编码在 Oracle 数据库中的一系列固定的规则,来决定目标 SQL 的执行计划.Oracle 事先 ...

最新文章

  1. LeetCode--485
  2. python装饰器类-Python装饰器15-开始使用类作为装饰器
  3. Java 判断操作系统类型(适用于各种操作系统)
  4. 『数据库』数据库的查询可不是只知道Select就可以的--关系数据库系统的查询处理
  5. scipy是python下的什么_SciPy是什么
  6. 图论算法(六)-- 二分图的最大分配问题(JAVA)
  7. python规定浮点数类型可以不带小数部分吗_Python标准数据类型-数字
  8. Codeforces Round #381 (Div. 2)
  9. react-native 发送接收“广播”
  10. python编程(virtualenv环境)
  11. 邮件整体解决方案_为什么推荐用EmailCamel来做Shopify邮件营销?
  12. PPT文件如何大幅度瘦身、减小所占空间、提高播放速度?
  13. jk-fourm.php,JK车头灯与我的新年期望(已更新完毕)
  14. Oracle exists与not exists的用法总结
  15. ibm wodm studio 开发
  16. 能上QQ,无法打开网页解决办法!!!(亲测能用)
  17. 台式计算机蓝牙在哪,台式电脑蓝牙在哪里打开(台式电脑连接蓝牙教程分享)...
  18. google map 谷歌地图 更改当前定位图标icon大头钉小蓝点
  19. J-LINK 软件下载地址
  20. LVDS 显示屏的两种接口标准:VESA 和 JEIDA;单/双路 LVDS 信号

热门文章

  1. Java按包编译jar_java用命令行编译运行时带有包和使用外部jar包的情况
  2. 重构是什么、为什么要重构
  3. Unity官网进不去?打不开?下载不了?
  4. Unity3d中使用百度语音识别及语音合成【含源码】
  5. Vue 3.0 Beta
  6. 创建用于图像大小调整和裁剪器保持纵横比的ASP.NET控件
  7. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分
  8. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法
  9. parallels desktop 启动过失败_使用u启动软件制作启动盘时注意哪些【详细介绍】...
  10. mysql不同的类的个数_Mysql-SQL优化-统计某种类型的个数_MySQL