设为首页 收藏本站
查看: 863|回复: 0

[经验分享] Oracle Outline

[复制链接]

尚未签到

发表于 2018-9-25 07:27:21 | 显示全部楼层 |阅读模式
  1)outline
  1@@@@information
  @@@
  select * from dba_outlines;
  select * from dba_outline_hints;
  select * from dba_view where view_name='DBA_OUTLINES'
  select * from outln.ol$;     @@@base table
  select * from outln.ol$hints;  @@@base table
  @@@
  @@@referencing
  http://www.oracle-base.com/articles/misc/outlines.php
  2@@@@a basic example for outline by scott
  preview:
  grant privilege to scott for lab.
  create a outline "emp_dept" to a category "scott_outlines"
  ~~create a outline using general way.
  create a second outline in the same category.
  ~~use "dbms_outln.create_outline" to create outline for that sql statement.
  check the outline your created.
  ~~user_outlines
  ~~user_outlines_hints
  begin to using outline for these sql statement.
  drop outline
  summary
  @@@
  @@@grant privilege to scott for lab.
  @@@
  SQL> conn / as sysdba;
  SQL> grant create any outline to scott;
  SQL> grant resource to scott;
  SQL> grant execute_catalog_role to scott;

  SQL>>
  SQL>>  @@@Outlines can be created automatically by Oracle or manually
  @@@for specific statements.
  @@@
  @@@create a outline "emp_dept" to a category "scott_outlines"
  @@@
  @@@create a outline using general purpose
  @@@one category map multi-oultine.
  SQL> conn scott/scott
  SQL> ed
  1  CREATE OUTLINE  emp_dept
  2  FOR CATEGORY scott_outlines
  3  ON
  4  SELECT e.empno, e.ename, d.dname
  5  FROM  emp e, dept d
  6* WHERE e.deptno = d.deptno
  SQL> /
  @@@
  @@@check using "user_outlines"
  SQL> col name format a30
  SQL> ed
  1  SELECT name, category, sql_text
  2  FROM user_outlines
  3* WHERE category='SCOTT_OUTLINES'
  SQL> /
  NAME                   CATEGORY
  ------------------------------ -----------------
  SQL_TEXT
  ----------------------------------------------
  EMP_DEPT               SCOTT_OUTLINES
  SELECT e.empno, e.ename, d.dname
  FROM  emp e, dept d
  WHERE e.deptno = d.deptno
  @@@
  @@@check using "user_outline_hints"
  SQL> set linesize 200
  SQL> ed
  1  SELECT node, stage, join_pos, hint
  2  FROM user_outline_hints
  3* WHERE name='EMP_DEPT'
  SQL> /
  NODE    STAGE    JOIN_POS HINT
  ---------- ---------- ---------- ----------------------------------------------
  1        1           0 USE_NL(@"SEL$1" "D"@"SEL$1")
  1        1           0 LEADING(@"SEL$1" "E"@"SEL$1" "D"@"SEL$1")
  1        1           2 INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
  1        1           1 FULL(@"SEL$1" "E"@"SEL$1")
  1        1           0 OUTLINE_LEAF(@"SEL$1")
  1        1           0 ALL_ROWS
  1        1           0 OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
  1        1           0 IGNORE_OPTIM_EMBEDDED_HINTS
  8 rows selected.
  @@@
  @@@create a second outline in the same category.
  @@@
  @@@create the outline for this sql statement.
  SQL> ed
  1  SELECT e.empno, e.ename, d.dname, e.job
  2  FROM emp e, dept d
  3  WHERE e.deptno = d.deptno
  4*   AND d.dname = 'SALES'
  SQL> /
  EMPNO ENAME      DNAME         JOB
  ---------- ---------- -------------- ---------
  7499 ALLEN      SALES         SALESMAN
  7521 WARD       SALES         SALESMAN
  7654 MARTIN     SALES         SALESMAN
  7698 BLAKE      SALES         MANAGER
  7844 TURNER     SALES         SALESMAN
  7900 JAMES      SALES         CLERK
  @@@
  SQL> ed
  1  SELECT hash_value, child_number, sql_text
  2  FROM v$sql
  3* WHERE sql_text LIKE 'SELECT e.empno, e.ename, d.dname, e.job%'
  SQL> /
  HASH_VALUE CHILD_NUMBER
  ---------- ------------
  SQL_TEXT
  --------------------------------------------------------------------------------
  3985699533          0
  SELECT e.empno, e.ename, d.dname, e.job FROM emp e, dept d WHERE e.deptno = d.de
  ptno   AND d.dname = 'SALES'
  @@@
  @@@use "dbms_outln.create_outline"  to create outline for that sql statement.
  @@@according to the hash_value
  SQL> ed
  1  BEGIN
  2   DBMS_OUTLN.create_outline(
  3    hash_value => 3985699533,
  4    child_number => 0,
  5    category => 'SCOTT_OUTLINES');
  6* END;
  SQL> /
  PL/SQL procedure successfully completed.
  @@@
  @@@check the outline your created.
  @@@
  @@@check the outline using "user_outlines"
  SQL> col name format a30
  SQL> ed
  1  SELECT name, category, sql_text
  2  FROM user_outlines
  3* WHERE category = 'SCOTT_OUTLINES'
  SQL> /
  NAME                   CATEGORY
  ------------------------------ ------------------------------
  SQL_TEXT
  --------------------------------------------------------------------------------
  EMP_DEPT               SCOTT_OUTLINES
  SELECT e.empno, e.ename, d.dname
  FROM  emp e, dept d
  WHERE e.deptno = d.deptno
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES
  SELECT e.empno, e.ename, d.dname, e.job
  FROM emp e, dept d
  WHERE e.deptno = d.de
  @@@
  @@@check the outline using "user_outlines_hints"
  SQL> col hint format a50
  SQL> ed
  1  SELECT node, stage, join_pos, hint
  2  FROM user_outline_hints
  3* WHERE name='SYS_OUTLINE_12070714433606601'
  SQL> /
  NODE    STAGE    JOIN_POS HINT
  ---------- ---------- ---------- --------------------------------------------------
  1        1           0 USE_NL(@"SEL$1" "D"@"SEL$1")
  1        1           0 LEADING(@"SEL$1" "E"@"SEL$1" "D"@"SEL$1")
  1        1           2 INDEX(@"SEL$1" "D"@"SEL$1" ("DEPT"."DEPTNO"))
  1        1           1 FULL(@"SEL$1" "E"@"SEL$1")
  1        1           0 OUTLINE_LEAF(@"SEL$1")
  1        1           0 ALL_ROWS
  1        1           0 OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
  1        1           0 IGNORE_OPTIM_EMBEDDED_HINTS
  8 rows selected.
  @@@
  SQL> SELECT name, category , used FROM user_outlines;
  NAME                   CATEGORY               USED
  ------------------------------ ------------------------------ ------
  EMP_DEPT               SCOTT_OUTLINES              UNUSED
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES              UNUSED
  @@@
  SQL> SELECT e.empno, e.ename , d.dname FROM emp e, dept d WHERE e.deptno=d.deptno;
  SQL> SELECT e.empno, e.ename, d.dname, e.job FROM emp e, dept d
  WHERE e.deptno = d.deptno AND d.dname = 'SALES';
  @@@
  SQL> SELECT name, category , used FROM user_outlines;
  NAME                   CATEGORY               USED
  ------------------------------ ------------------------------ ------
  EMP_DEPT               SCOTT_OUTLINES              UNUSED
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES              UNUSED
  @@@
  @@@begin to using outline for these sql statement.
  @@@
  @@@open the execute plan to check

  SQL>>
  SQL>>  SQL> set autot on
  SQL> SELECT e.empno, e.ename , d.dname FROM emp e, dept d WHERE e.deptno=d.deptno;
  Note
  -----
  - outline "EMP_DEPT" used for this statement
  SQL> SELECT e.empno, e.ename, d.dname, e.job FROM emp e, dept d
  WHERE e.deptno = d.deptno AND d.dname = 'SALES';
  Note
  -----
  - outline "SYS_OUTLINE_12070714433606601" used for this statement
  @@@
  SQL> SELECT name, category , used FROM user_outlines;
  NAME                   CATEGORY               USED
  ------------------------------ ------------------------------ ------
  EMP_DEPT               SCOTT_OUTLINES              USED
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES              USED
  @@@
  @@@drop outline
  @@@
  SQL> exec dbms_outln.drop_by_cat(cat=> 'SCOTT_OUTLINE');
  PL/SQL procedure successfully completed.
  @@@
  @@@summary
  @@@
  keep one execution plan with runing a sql statement using current statistic,
  when you set "alter session/system set use_stored_outline="
  parameter, you would use privous excution and ignore current statistic.
  3@@@@clone outline
  @@@may be it is replacing.
  SQL> select name,category from user_outlines;
  NAME                   CATEGORY
  ------------------------------ ------------------------------
  EMP_DEPT               SCOTT_OUTLINES
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES
  SQL> CREATE OR REPLACE OUTLINE clone_outline01
  FROM emp_dept
  FOR CATEGORY scott_outlines;
  Outline created.
  SQL> select name,category from user_outlines;
  NAME                   CATEGORY
  ------------------------------ ------------------------------
  CLONE_OUTLINE01            SCOTT_OUTLINES
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES
  4@@@@private outline
  @@@
  SQL> CREATE PRIVATE OUTLINE private_dev01 FROM CLONE_OUTLINE01;
  Outline created.
  SQL> select name,category from user_outlines;
  NAME                   CATEGORY
  ------------------------------ ------------------------------
  CLONE_OUTLINE01            SCOTT_OUTLINES
  SYS_OUTLINE_12070714433606601  SCOTT_OUTLINES
  SQL> CREATE OR REPLACE  PRIVATE OUTLINE private_dev02 FROM clone_outline01;
  Outline created.
  @@@this is a implict parameter.
  @@@true => use private outline
  @@@false => use public outline

  SQL>>
  Session>  5@@@@outline editing
  @@@use /*+ xxxxx */ hint to leading the excution plan in the outline
  Editable Attributes
  · Join order
  · Join methods
  · Access methods
  · Distributed execution plans
  · Distribution methods for parallel query execution
  · Query rewrite
  · View and subquery merging
  @@@to be continue......................
  



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-600880-1-1.html 上篇帖子: Linux下安装Oracle11g服务器 下篇帖子: oracle词汇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表