ITPub博客

首页 > 数据库 > Oracle > Oracle全部索引丢失导致的效率问题处理

Oracle全部索引丢失导致的效率问题处理

原创 Oracle 作者:luckyfriends 时间:2014-02-17 17:11:44 0 删除 编辑

文章版权所有Jusin Haoluckyfriends),支持原创,转载请注明。

操作系统aix,存在有进程长时间占用cpu达24%;如下进程对应sql语句,

clip_image002

等待事件:latch free

clip_image004

同样的sql等待时间一会儿 有变成SQL*NET memssage from client;

SELECT scm_batchcode.tbatchtime, scm_batchcode.dproducedate, scm_batchcode.dvalidate, scm_batchcode.vvendbatchcode, scm_batchcode.cqualitylevelid, scm_batchcode.vnote, scm_batchcode.tchecktime, scm_batchcode.pk_batchcode, scm_batchcode.bseal, scm_batchcode.ts, scm_batchcode.vdef1, scm_batchcode.vdef2, scm_batchcode.vdef3, scm_batchcode.vdef4, scm_batchcode.vdef5, scm_batchcode.vdef6, scm_batchcode.vdef7, scm_batchcode.vdef8, scm_batchcode.vdef9, scm_batchcode.vdef10, scm_batchcode.vdef11, scm_batchcode.vdef12, scm_batchcode.vdef13, scm_batchcode.vdef14, scm_batchcode.vdef15, scm_batchcode.vdef16, scm_batchcode.vdef17, scm_batchcode.vdef18, scm_batchcode.vdef19, scm_batchcode.vdef20, scm_batchcode.binqc, scm_batchcode.pk_defdoc1, scm_batchcode.pk_defdoc2, scm_batchcode.pk_defdoc3, scm_batchcode.pk_defdoc4, scm_batchcode.pk_defdoc5, scm_batchcode.pk_defdoc6, scm_batchcode.pk_defdoc7, scm_batchcode.pk_defdoc8, scm_batchcode.pk_defdoc9, scm_batchcode.pk_defdoc10, scm_batchcode.pk_defdoc11, scm_batchcode.pk_defdoc12, scm_batchcode.pk_defdoc13, scm_batchcode.pk_defdoc14, scm_batchcode.pk_defdoc15, scm_batchcode.pk_defdoc16, scm_batchcode.pk_defdoc17, scm_batchcode.pk_defdoc18, scm_batchcode.pk_defdoc19, scm_batchcode.pk_defdoc20 FROM scm_batchcode WHERE scm_batchcode.pk_invbasdoc = :1 AND scm_batchcode.vbatchcode = :2

系统慢问题:

1. 修改凭证后保存凭证也异常的慢,需要时间20秒左右

该sql的执行计划

clip_image016

发现此表上只有一个主键的唯一索引;

clip_image018

查询数据库发现nc所有的表基本上都是只有主键上的索引;非唯一所以只有三个;

clip_image020

验证加索引后问题可解决:

Create Index I_gl_detail_1 On gl_detail(pk_voucher);

clip_image022

原来是之前存储坏的时候,客户dba 进行exp备份时设置了错误的参数,导致没有备份索引,后导入丢失了索引

解决方法:利用历史备份导出索引创建文件:

imp tb20111018/oracle@nbtb53 file=F:\tb20111018\yydatabakup\nc52.dmp log=F:\tb20111018\yydatabakup\nc52.log full=y feedback=10000 buffer=10240000 rows=N indexes=Y ignore=Y INDEXFILE=F:\tb20111018\yydatabakup\create_index.txt

利用宏剔除特殊字符等

clip_image024

去掉创建表的语句

clip_image026

然后保存为sql脚本,执行该创建索引的脚本。

建完索引后原来有问题的业务操作对应的sql堆栈发现sql语句已经不再是很长时间,而是ms级;

clip_image032

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

请登录后发表评论 登录
全部评论
个人博客网 www.leosunny 长期从事数据库相关工作,涉及oracle,mysql, sqlsever,db2 , OGG, SSIS以及非关系数据库和大数据平台等。 希望一直分享一些个人案例和知识,和广大技术宅们共同进步。

注册时间:2009-06-06

  • 博文量
    468
  • 访问量
    3161167