当前位置:  数据库>oracle

使用Oracle sql profile固定执行计划

    来源: 互联网  发布时间:2017-05-17

    本文导语: 使用sql profile固定执行计划实验 Oracle 10g之前有outlines,10g之后sql profile作为新特性之一出现。 如果针对非绑定变量的sql,outlines则力不从心。 下面是实验过程 --1.准备阶段 SQL> select * from v$version; BANNER --------------------------------------...

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

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

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

下面是实验过程

  • --1.准备阶段
  • SQL> select * from v$version;
  • BANNER
  • ----------------------------------------------------------------
  • Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
  • PL/SQL Release 10.2.0.1.0 - Production
  • CORE 10.2.0.1.0 Production
  • TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
  • NLSRTL Version 10.2.0.1.0 - Production
  • SQL> createtable test_raugher asselect * from dba_objects;
  • 表已创建。
  • SQL> createindex ind_objectid on test_raugher(object_id);
  • 索引已创建。
  • SQL> select object_id from test_raugher where rownum exec dbms_stats.gather_table_stats(user,'TEST_RAUGHER',cascade=>true);
  • PL/SQL 过程已成功完成。
  • --原sql执行计划
  • SQL> set autot trace explain
  • SQL> select * from test_raugher where object_id=20;
  • 执行计划
  • ----------------------------------------------------------
  • Plan hash value: 800879874
  • --------------------------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • --------------------------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | 1 | 95 | 2 (0)| 00:00:01 |
  • | 1 | TABLE ACCESS BYINDEX ROWID| TEST_RAUGHER | 1 | 95 | 2 (0)| 00:00:01 |
  • |* 2 | INDEX RANGE SCAN | IND_OBJECTID | 1 | | 1 (0)| 00:00:01 |
  • --------------------------------------------------------------------------------------------
  • Predicate Information (identified by operation id):
  • ---------------------------------------------------
  • 2 - access("OBJECT_ID"=20)
  • SQL>
  • --新sql执行计划
  • SQL> select /*+ full(test_raugher) */ * from test_raugher where object_id=20;
  • 执行计划
  • ----------------------------------------------------------
  • Plan hash value: 3725671026
  • ----------------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • ----------------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
  • |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
  • ----------------------------------------------------------------------------------
  • Predicate Information (identified by operation id):
  • ---------------------------------------------------
  • 1 - filter("OBJECT_ID"=20)
  • --2.获取新sql的sql_id
  • SQL> col sql_id for a20
  • SQL> col sql_text for a100
  • SQL> select sql_id,sql_text from v$sql where sql_text like'%full(test_raugher)%';
  • SQL_ID SQL_TEXT
  • -------------------- ----------------------------------------------------------------------------------------------------
  • 5nkhk378705z3 select sql_id,sql_text from v$sql where sql_text like'%full(test_raugher)%'
  • g23hbdmcsdahc select /*+ full(test_raugher) */ * from test_raugher where object_id=20
  • dqp79vx5pmw0k EXPLAIN PLAN SET STATEMENT_ID='PLUS4294967295'FORselect /*+ full(test_raugher) */ * from test_raug
  • her where object_id=20
  • --3.获取新sql的outline
  • SQL> set pagesize 1000
  • SQL> select * fromtable(dbms_xplan.display_cursor('g23hbdmcsdahc',null,'outline'));
  • PLAN_TABLE_OUTPUT
  • -----------------------------------------------------------------------------------------------
  • -----------------------------------------------------------------------------------------------
  • SQL_ID g23hbdmcsdahc, child number 0
  • -------------------------------------
  • select /*+ full(test_raugher) */ * from test_raugher where object_id=20
  • Plan hash value: 3725671026
  • ----------------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • ----------------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | | | 166 (100)| |
  • |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
  • ----------------------------------------------------------------------------------
  • Outline Data
  • -------------
  • /*+
  • BEGIN_OUTLINE_DATA
  • IGNORE_OPTIM_EMBEDDED_HINTS
  • OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
  • ALL_ROWS
  • OUTLINE_LEAF(@"SEL$1")
  • FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")
  • END_OUTLINE_DATA
  • */
  • Predicate Information (identified by operation id):
  • ---------------------------------------------------
  • 1 - filter("OBJECT_ID"=20)
  • 已选择31行。
  • --4.创建sql profile(SQLPROFILE_001)
  • SQL> declare
  • 2 v_hints sys.sqlprof_attr;
  • 3 begin
  • 4 v_hints:=sys.sqlprof_attr(
  • 5 'BEGIN_OUTLINE_DATA',
  • 6 'IGNORE_OPTIM_EMBEDDED_HINTS',
  • 7 'OPTIMIZER_FEATURES_ENABLE(''10.2.0.1'')',
  • 8 'ALL_ROWS',
  • 9 'OUTLINE_LEAF(@"SEL$1")',
  • 10 'FULL(@"SEL$1" "TEST_RAUGHER"@"SEL$1")',
  • 11 'END_OUTLINE_DATA');
  • 12 dbms_sqltune.import_sql_profile(
  • 13 'select * from test_raugher where object_id=20',
  • 14 v_hints,'SQLPROFILE_001',
  • 15 force_match=>true,replace=>false);
  • 16 end;
  • 17 /
  • PL/SQL 过程已成功完成。
  • --5.查看是否使用sql profile
  • SQL> set autot trace explain
  • SQL> select * from test_raugher where object_id=20;
  • 执行计划
  • ----------------------------------------------------------
  • Plan hash value: 3725671026
  • ----------------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • ----------------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
  • |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
  • ----------------------------------------------------------------------------------
  • Predicate Information (identified by operation id):
  • ---------------------------------------------------
  • 1 - filter("OBJECT_ID"=20)
  • Note
  • -----
  • - SQL profile "SQLPROFILE_001" used for this statement
  • SQL> select * from test_raugher where object_id=200;
  • 执行计划
  • ----------------------------------------------------------
  • Plan hash value: 3725671026
  • ----------------------------------------------------------------------------------
  • | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  • ----------------------------------------------------------------------------------
  • | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
  • |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
  • ----------------------------------------------------------------------------------
  • Predicate Information (identified by operation id):
  • ---------------------------------------------------
  • 1 - filter("OBJECT_ID"=200)
  • Note
  • -----
  • - SQL profile "SQLPROFILE_001" used for this statement

  •     
     
     

    您可能感兴趣的文章:

  • linux下不使用sudo命令执行docker的操作步骤
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • SUSE10下,如何使用perl语言执行一条语句:从一台机器telnet到远端另一台机器,在远端机器上执行命令,并能获取到执行结果。请高手指点,Very 谢谢~
  • 关于在QT环境下加载gif图片的问题(可以显示,但是只有使用终端启动可执行文件才能显示,双击执行却不显示)这是为什么?
  • 如何使用crontab来定时执行一个.php的程序
  • 使用Statement.java里的execute执行存储过程问题
  • 关于如何使用shell自动执行一个sybase的存储过程
  • 使用终端远程执行程序的问题!
  • 使用java执行定时任务示例
  • 为什么socket程序使用gdb调试执行就接受不到数据了呢?
  • 有谁使用过cgywin吗?它有文字编辑的执行文件吗?
  • 如何让用户只能使用sftp而且不能执行其他shell命令
  • Unix下System函数实现中为何要使用shell去调用执行程序?
  • 我想使用snoop命令,可是又不是root用户,可否设置我的帐户可以执行snoop呢?
  • 请问:在HP-UX下如何替换正在使用的可执行文件?
  • 在使用main时怎样执行参数的命令
  • 求教:使用crontab如何完成每间隔80分钟的执行一个命令的方法?
  • gcc使用的问题,为什么不能执行a.out文件?
  • 关于java中执行sql语句使用order by的问题!
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • 为何我使用javascript中location'****.jsp'跳到某一页面,jsp页面不重新编译执行
  • 我在/etc/profile文件后面加上一段内容后,系统不能正常启动,也不能进入bash使用vi,ed,emacs,mv等指令,请问我怎么把/etc/profile文件内
  • 我使用的是root用户登陆,但却不能编辑/etc/profile文件,该如何解决。
  • Mysql自带profiling性能分析工具使用分享
  • 解析Mysql Profiling的使用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么使用计划任务?
  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能
  • linux下使用crontab实现定时PHP计划任务失败的原因分析
  • linux使用crontab实现PHP执行计划定时任务
  • Windows中使用计划任务自动执行PHP程序实例
  • Oracle中使用DBMS_XPLAN处理执行计划详解
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Python不使用print而直接输出二进制字符串
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • Office 2010 Module模式下使用VBA Addressof
  • c#中SAPI使用总结——SpVoice的使用方法
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • asp程序使用的access在Linux下如何使用!
  • c/c++预处理命令预#,##使用介绍
  • 新装的Linux使用root用户不能使用FTP?
  • 在div中使用css让文字底部对齐的方法
  • LINUX下使用Eclipse,如何使用交叉编译器?
  • Python namedtuple(命名元组)使用实例
  • 怎么使用计划任务? iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,