資料儲存在資料塊中,塊空間管理不當直接導致列遷移、列鏈結,拖垮 I/O 效能。本文提供從根因到修復的完整 SOP。
PCTFREE 過低 或 平均行長估算不準。DB_BLOCK_SIZE 過小 或 設計有巨大欄位。ANALYZE TABLE target_table LIST CHAINED ROWS; (結果存 CHAINED_ROWS 表)。SELECT * FROM CHAINED_ROWS WHERE TABLE_NAME = 'TARGET_TABLE';CREATE TABLE INT_TARGET_TABLE AS
SELECT * FROM TARGET_TABLE
WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME='TARGET_TABLE');DELETE FROM TARGET_TABLE
WHERE ROWID IN (SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME='TARGET_TABLE');INSERT INTO TARGET_TABLE SELECT * FROM INT_TARGET_TABLE;DROP TABLE INT_TARGET_TABLE;
DELETE FROM CHAINED_ROWS WHERE TABLE_NAME='TARGET_TABLE';
ANALYZE TABLE TARGET_TABLE LIST CHAINED ROWS;
SELECT * FROM CHAINED_ROWS WHERE TABLE_NAME='TARGET_TABLE';DB_BLOCK_SIZE (需重建庫) 或垂直拆分大欄位。| 參數 | 建議設定 | 說明 |
|---|---|---|
| PCTFREE | 10~20 (OLTP) | 預留更新空間,防遷移 |
| PCTUSED | 40 (配合 PCTFREE) | 控制塊重入 Freelist 門檻 |
| DB_BLOCK_SIZE | 8K/16K (現代標準) | 容納較大行,減少鏈結 |
| LMT + ASSM | 啟用 | 自動段空間管理,取代 Freelist |
ANALYZE ... LIST CHAINED ROWS 在大表上耗時長,可改用 DBMS_STATS 採樣模式 (11g+)。ENABLE STORAGE IN ROW (≤ 4KB) 或移至獨立 LOB 表空間。