ITPub博客

首页 > 数据库 > Oracle > 博文第100篇---让索引记录空值

博文第100篇---让索引记录空值

原创 Oracle 作者:oracle_mao 时间:2014-01-22 08:40:08 0 删除 编辑

昨天下午时发现监控告警,数据库的磁盘使用率100%,用以下sql语句查看数据库正在执行的sql:
select to_char(sql_fulltext),
       v$sqlarea.sql_id,
       last_call_et continue_time,
       logon_time,
       v$process.spid,
       sid,
       v$session.serial#,
       v$sqlarea.hash_value,
       v$sqlarea.plan_hash_value,
       v$session.username,
       LOCKWAIT,
       machine
  from v$session, v$process, v$sqlarea
 where paddr = addr
   and sql_hash_value = hash_value
   and status = 'ACTIVE'
   and v$session.username is not null
 order by last_call_et desc;
发现很有同一个sql_id的sql正在执行,而且时间都已经超过100s,sql如下:
SELECT t1.*
  FROM t1
 WHERE (t1.PROC_PLAN_ID IS NULL)
   AND (t1.SEQ_ID IS NULL)
查看T1表为2.5G,执行计划是全表扫描。咨询了开发人员,他们说缺少where条件,在他们查找程序的过程中,我再T1表上创建了一个索引。正常情况下,索引是不记录空值的,但如果创建组合索引,那执行计划就会使用该索引。
create index pppli_null on T1(PROC_PLAN_ID,SEQ_ID,0);
再次查看执行计划发现已经走了索引,执行时间约为0.1s。此时磁盘使用率也下降为20%。
 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24500180/viewspace-1073691/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 11R2--配置RAC+DG
下一篇: 直方图
请登录后发表评论 登录
全部评论

注册时间:2011-03-28

  • 博文量
    94
  • 访问量
    752910