清理Oracle中無用索引改善DML效能

tolywang發表於2007-05-10
DML效能低下,其中最嚴重的原因之一是無用索引的存在。所有SQL的插入、更新和刪除操作在它們需要在每一行資料被改變時修改大量索引的時候會變得更慢。

許多Oracle管理人員只要看見在一個SQL 查詢的WHERE語句出現了一列的話就會為它分配索引。雖然這個方法能夠讓SQL執行得更快速,但是基於功能的Oracle索引使得資料庫管理人員有可能在資料表的行上過度分配索引。過度分配索引會嚴重影響關鍵Oracle資料表的效能。

在Oracle9i出現以前,沒有辦法確定SQL查詢沒有使用的索引。讓我們看看Oracle9i提供了什麼樣的方法讓你找到這些索引並刪除它們。

過程是相當簡單的。Oracle9i有一個工具能夠讓你使用ALTER INDEX命令監視索引的使用。然後你可以查詢這些沒有使用的索引並從資料庫裡刪除它們。

下面是一段指令碼,它能夠開啟一個系統中所有索引的監視功能:

set pages 999;

set heading off;

spoolrun_monitor.sql

select

  'alter index '||owner||'.'||index_name||' monitoring usage;'

from

   dba_indexes

where

   owner not in ('SYS','SYSTEM','PERFSTAT')

;

spool off;

@run_monitor

你需要等待一段時間直到在資料庫上執行了足夠多的SQL語句以後,然後你就可以查詢新的V$OBJECT_USAGE檢視:

select

index_name,

table_name,

mon,

used

from

v$object_usage;

在V$OBJECT_USAGE有一列被稱作USED,它的值是YES或者NO,它不會告訴你Oracle使用了這個索引多少次,但是這個工具對於找出沒有使用的索引還是很有用的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84613/,如需轉載,請註明出處,否則將追究法律責任。

相關文章