本文專注於 Oracle 資料庫中最常見的 B-tree 索引維護操作,參考版本為 Oracle 8i。透過系統視圖查詢與儲存結構分析,協助 DBA 掌握索引健康狀態,預防效能瓶頸。
SYSTEM 表空間為資料庫安裝時自動建立,存放資料字典、預存程序、套件、函數、觸發器定義及系統回滾段。為避免管理風險,強烈建議不要在 SYSTEM 表空間存放非 SYS/SYSTEM 使用者的物件。一旦 SYSTEM 表空間損壞,往往需重建整個資料庫。
以下 SQL 可快速偵測是否有其他使用者的索引佔用 SYSTEM 表空間:
SELECT COUNT(*)
FROM dba_indexes
WHERE tablespace_name = 'SYSTEM'
AND owner NOT IN ('SYS','SYSTEM');
若回傳值大於 0,應立即規劃移動這些索引至適當的使用者表空間。
Oracle 邏輯儲存單位由小到大依序為:資料區塊、範圍、段。
DB_BLOCK_SIZE 參數決定,資料庫建立後不可變更(Oracle 9i 另有彈性設定,不在本文討論範圍)。每個物件(如索引)僅對應一個段,透過查看段中的範圍分佈,即可掌握物件的儲存狀況。
範圍過多可能導致效能下降,建議定期監控:
SELECT segment_name, COUNT(*)
FROM dba_extents
WHERE segment_type = 'INDEX'
AND owner = UPPER('&owner')
GROUP BY segment_name;
了解各索引在不同大小範圍的分佈,有助於規劃儲存參數:
SELECT SUBSTR(segment_name,1,20) "SEGMENT NAME",
bytes,
COUNT(bytes)
FROM dba_extents
WHERE segment_name IN (
SELECT index_name
FROM dba_indexes
WHERE tablespace_name = UPPER('&表空間')
)
GROUP BY segment_name, bytes
ORDER BY segment_name;
索引維護是資料庫效能調優的基石。定期檢查 SYSTEM 表空間純淨度、監控索引段範圍碎片化程度,並配合適當的儲存參數設定,可顯著提升查詢效能並降低維護成本。