当前位置:  数据库>oracle

Oracle 锁定临时表统计信息及锁住后是否能用动态采集的hint

    来源: 互联网  发布时间:2017-06-11

    本文导语: 全局临时表的统计信息是不能被收集的,如果被收集,它的统计信息肯定为0,会造成执行计划不准,所以要锁定它的统计信息,禁止系统自动收集。 --先解锁表的统计信息,然后删除表的统计信息,最后锁住表的统计信息 declare...

全局临时表的统计信息是不能被收集的,如果被收集,它的统计信息肯定为0,会造成执行计划不准,所以要锁定它的统计信息,禁止系统自动收集。

--先解锁表的统计信息,然后删除表的统计信息,最后锁住表的统计信息

declare

  v_sqlvarchar2(500);

  cursor rowList1 is

  select'begin dbms_stats.unlock_table_stats(user,''' || table_name ||'''); end;'

    from user_tables s

  where s.temporary = 'Y'; 

  cursor rowList2 is

  select'begin dbms_stats.delete_table_stats(user,''' || table_name ||'''); end;'

    from user_tables s

  where s.temporary = 'Y';

  cursor rowList3 is

  select'begin dbms_stats.lock_table_stats(user,''' || table_name ||'''); end;'

    from user_tables s

  where s.temporary = 'Y'; 

begin

  open rowList1;

  open rowList2;

  open rowList3;

  loop

    fetch rowList1  into v_sql;

      executeimmediate v_sql;

    exitwhen rowList1%notfound;

  endloop;

  loop

    fetch rowList2  into v_sql;

      executeimmediate v_sql;

    exitwhen rowList2%notfound;

  endloop;

  loop

    fetch rowList3  into v_sql;

      executeimmediate v_sql;

    exitwhen rowList3%notfound;

  endloop; 

  close rowList1;

  close rowList2;

  close rowList3;

end;

-- STATTYPE_LOCKED='ALL'意思是表的统计信息被锁

select s.table_name,s.STATTYPE_LOCKED  from user_TAB_STATISTICS s  where s.STATTYPE_LOCKED='ALL';

--当表的统计信息被锁后,用动态采集的hint是否生效,实验结果是hint是生效的

SQL> drop table test purge;
SQL> create table test as select * from dba_objects;
SQL> exec dbms_stats.lock_table_stats(user,'test');
SQL> select s.num_rows, s.last_analyzed
      from user_tables s
    where s.table_name = 'TEST';
  NUM_ROWS LAST_ANALYZED
---------- --------------

--说明表被锁了
SQL> select s.STATTYPE_LOCKED from user_TAB_STATISTICS s
    where s.table_name='TEST';
STATTYPE_L
----------
ALL
SQL> select count(*) from test;
  COUNT(*)
----------
    70384
SQL> set autotrace traceonly
SQL> select /*+ dynamic_sampling(test 1) */ * from test;
已选择70384行。
执行计划
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time    |
--------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |      |  160K|    31M|  199  (3)| 00:00:03 |
|  1 |  TABLE ACCESS FULL| TEST |  160K|    31M|  199  (3)| 00:00:03 |
--------------------------------------------------------------------------
Note
-----
  - dynamic sampling used for this statement (level=2)
统计信息
----------------------------------------------------------
          4  recursive calls
          0  db block gets
      5239  consistent gets
          0  physical reads
          0  redo size
    3186713  bytes sent via SQL*Net to client
      51949  bytes received via SQL*Net from client
      4694  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      70384  rows processed


SQL> select /*+ dynamic_sampling(test 5) */ * from test;
已选择70384行。
执行计划
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time    |
--------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |      |  9747 |  1970K|  195  (0)| 00:00:03 |
|  1 |  TABLE ACCESS FULL| TEST |  9747 |  1970K|  195  (0)| 00:00:03 |
--------------------------------------------------------------------------
Note
-----
  - dynamic sampling used for this statement (level=2)
统计信息
----------------------------------------------------------
          4  recursive calls
          0  db block gets
      5239  consistent gets
          0  physical reads
          0  redo size
    3186713  bytes sent via SQL*Net to client
      51949  bytes received via SQL*Net from client
      4694  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      70384  rows processed


SQL> select /*+ dynamic_sampling(test 10) */ * from test;
已选择70384行。
执行计划
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id  | Operation        | Name | Rows  | Bytes | Cost (%CPU)| Time    |
--------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |      | 70384 |    13M|  197  (2)| 00:00:03 |
|  1 |  TABLE ACCESS FULL| TEST | 70384 |    13M|  197  (2)| 00:00:03 |
--------------------------------------------------------------------------
Note
-----
  - dynamic sampling used for this statement (level=2)
统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      5165  consistent gets
          0  physical reads
          0  redo size
    3186713  bytes sent via SQL*Net to client
      51949  bytes received via SQL*Net from client
      4694  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      70384  rows processed

Oracle 单实例 从32位 迁移到 64位 方法 

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle导入导出expdp IMPDP详解

Oracle 10g expdp导出报错ORA-4031的解决方法


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • Linux系统查看Oracle服务是否启动
  • oracle for linux 是否免费?
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • solaris9下怎么查看oracle服务是否启动,以及怎么启动,在线等待。
  • Oracle判断指定列是否全部为数字的sql语句
  • 在unix下,用root登陆后,如何判断oracle是否启动了?
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • 查找oracle数据库表中是否存在系统关键字的方法
  • Oracle删除表前判断表名是否存在若存在则删除
  • SOS!java如何用jdbc与oracle相连,是否要安装相应的驱动程序
  • linux iis7站长之家
  • oracle使用instr或like方法判断是否包含字符串
  • 紧急! 如何得知一特定表是否存在的信息?(ORACLE).....
  • REDHAT LINUX 企业版是否有盗版问题;ORACLE 一定要用LINUX企业版么?
  • 安装Oracle失败后是否一定要重装系统
  • Oracle中检查是否需要重构索引的sql
  • 查看Oracle中是否有锁表的sql
  • Oracle外键列上是否需要索引?
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


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

    ©2012-2021,