加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用oracle sql profile固定执行计划

发布时间:2020-12-12 15:37:38 所属栏目:百科 来源:网络整理
导读:2013-02-05 16:19:36 标签: oracle sql profile 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 使用sql profile固定执行计划实验 10g之前有outlines,10g之后sql profile作为新特性之一出现。 如果针对非绑定变量的sql,outlines则力不
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. OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Prod
  6. PL/SQLRelease10.2.0.1.0-Production
  7. CORE10.2.0.1.0Production
  8. TNSfor32-bitWindows:Version10.2.0.1.0-Production
  9. NLSRTLVersion10.2.0.1.0-Production
  10. SQL>createtabletest_raugherasfromdba_objects;
  11. 表已创建。
  12. SQL>indexind_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>setautottraceexplain
  22. SQL>whereobject_id=20;
  23. 执行计划
  24. ----------------------------------------------------------
  25. Planhashvalue: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|INDEXRANGESCAN|IND_OBJECTID|1||1(0)|00:00:01|
  32. --------------------------------------------------------------------------------------------
  33. PredicateInformation(identifiedbyoperationid):
  34. ---------------------------------------------------
  35. 2-access("OBJECT_ID"=20)
  36. SQL>
  37. --新sql执行计划
  38. SQL>select/*+full(test_raugher)*/*whereobject_id=20;
  39. 执行计划
  40. ----------------------------------------------------------
  41. Planhashvalue:3725671026
  42. ----------------------------------------------------------------------------------
  43. |Id|Operation|Time|
  44. ----------------------------------------------------------------------------------
  45. |0|SELECTSTATEMENT||1|95|166(2)|00:00:02|
  46. |*1|FULL|TEST_RAUGHER|1|95|166(2)|00:00:02|
  47. ----------------------------------------------------------------------------------
  48. PredicateInformation(identified---------------------------------------------------
  49. 1-filter("OBJECT_ID"=20)
  50. --2.获取新sql的sql_id
  51. SQL>colsql_idfora20
  52. SQL>colsql_textfora100
  53. SQL>selectsql_id,sql_textfromv$sqlwheresql_textlike'%full(test_raugher)%';
  54. SQL_IDSQL_TEXT
  55. ------------------------------------------------------------------------------------------------------------------------
  56. 5nkhk378705z3like'%full(test_raugher)%'
  57. g23hbdmcsdahcwhereobject_id=20
  58. dqp79vx5pmw0kEXPLAINPLANSETSTATEMENT_ID='PLUS4294967295'FORfromtest_raug
  59. herwhereobject_id=20
  60. --3.获取新sql的outline
  61. SQL>setpagesize1000
  62. SQL>fromtable(dbms_xplan.display_cursor('g23hbdmcsdahc',null,'outline'));
  63. PLAN_TABLE_OUTPUT
  64. -----------------------------------------------------------------------------------------------
  65. -----------------------------------------------------------------------------------------------
  66. SQL_IDg23hbdmcsdahc,childnumber0
  67. -------------------------------------
  68. whereobject_id=20
  69. Planhashvalue:3725671026
  70. ----------------------------------------------------------------------------------
  71. |Id|Operation|----------------------------------------------------------------------------------
  72. |0|SELECTSTATEMENT||||166(100)||
  73. |*1|FULL|TEST_RAUGHER|1|95|166(2)|00:00:02|
  74. ----------------------------------------------------------------------------------
  75. OutlineData
  76. -------------
  77. /*+
  78. BEGIN_OUTLINE_DATA
  79. IGNORE_OPTIM_EMBEDDED_HINTS
  80. OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
  81. ALL_ROWS
  82. OUTLINE_LEAF(@"SEL$1")
  83. FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")
  84. END_OUTLINE_DATA
  85. */
  86. PredicateInformation(identified---------------------------------------------------
  87. 1-filter("OBJECT_ID"=20)
  88. 已选择31行。
  89. --4.创建sqlprofile(SQLPROFILE_001)
  90. SQL>declare
  91. 2v_hintssys.sqlprof_attr;
  92. 3begin
  93. 4v_hints:=sys.sqlprof_attr(
  94. 5'BEGIN_OUTLINE_DATA',
  95. 6'IGNORE_OPTIM_EMBEDDED_HINTS',
  96. 7'OPTIMIZER_FEATURES_ENABLE(''10.2.0.1'')',
  97. 8'ALL_ROWS',
  98. 9'OUTLINE_LEAF(@"SEL$1")',
  99. 10'FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")',
  100. 11'END_OUTLINE_DATA');
  101. 12dbms_sqltune.import_sql_profile(
  102. 13'select*fromtest_raugherwhereobject_id=20',
  103. 14v_hints,'SQLPROFILE_001',
  104. 15force_match=>true,replace=>false);
  105. 16end;
  106. 17/
  107. PL/SQL过程已成功完成。
  108. --5.查看是否使用sqlprofile
  109. SQL>setautottraceexplain
  110. SQL>---------------------------------------------------
  111. 1-filter("OBJECT_ID"=20)
  112. Note
  113. -----
  114. -SQLprofile"SQLPROFILE_001"usedforthisstatement
  115. SQL>whereobject_id=200;
  116. 执行计划
  117. ---------------------------------------------------
  118. 1-filter("OBJECT_ID"=200)
  119. Note
  120. forthisstatement

创建sql profile

   
   
  • DBMS_SQLTUNE.IMPORT_SQL_PROFILE(
  • sql_text=>'FULLQUERYTEXT',
  • profile=>sqlprof_attr('HINTSPECIFICATIONWITHFULLOBJECTALIASES'),
  • name=>'PROFILENAME',
  • force_match=>TRUE/FALSE,
  • FALSE);
  • sql_text用于指定sql的全文本,可查询V$SQLAREA.SQL_FULLTEXT或DBA_HIST_SQLTEXT.SQL_TEXT获得。 

    删除sql proflie

       
       
  • BEGIN
  • DBMS_SQLTUNE.DROP_SQL_PROFILE(name=>'PROFILENAME');
  • END;
  • /
  • sql profile相关视图

    SELECTname,created,category,sql_Textfromdba_sql_profilesORDERBYcreatedDESC;
       
       
  • SELECTsql_attr.attr_valoutline_hints
  • FROMdba_sql_profilessql_profiles,sys.SQLPROF$ATTRsql_attr
  • WHEREsql_profiles.signature=sql_attr.signature
  • ANDsql_profiles.name='SQLPROFILE_001'
  • BYsql_attr.attr#ASC;
  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读