Oracle全部索引丟失導致的效率問題處理

luckyfriends發表於2014-02-17

文章版權所有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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章