Oracle 以高可靠性、安全性、兼容性獲企業青睞。本文從分區、索引維護、段碎片整理三大維度,分享保持 Oracle 永久優良性能的實戰訣竅。
CREATE TABLE Employee (
EmpNo VARCHAR2(10) PRIMARY KEY,
Name VARCHAR2(30),
DeptNo NUMBER(2)
)
PARTITION BY RANGE (DeptNo) (
PARTITION PART1 VALUES LESS THAN (11) TABLESPACE PART1_TS,
PARTITION PART2 VALUES LESS THAN (21) TABLESPACE PART2_TS,
PARTITION PART3 VALUES LESS THAN (31) TABLESPACE PART3_TS,
PARTITION PART4 VALUES LESS THAN (MAXVALUE) TABLESPACE PART4_TS
);
按 DeptNo 範圍分區,每區獨立表空間。
局部索引(推薦多數場景): 索引分區與表分區一一對應,易管理。
CREATE INDEX Employee_DeptNo ON Employee(DeptNo)
LOCAL (
PARTITION PART1 TABLESPACE PART1_NDX_TS,
PARTITION PART2 TABLESPACE PART2_NDX_TS,
PARTITION PART3 TABLESPACE PART3_NDX_TS,
PARTITION PART4 TABLESPACE PART4_NDX_TS
);
全局索引: 跨分區強制唯一性時使用,範圍可不同於表分區。
CREATE INDEX Employee_DeptNo ON Employee(DeptNo)
GLOBAL PARTITION BY RANGE (DeptNo) (
PARTITION PART1 VALUES LESS THAN (11) TABLESPACE PART1_NDX_TS,
...
);
ALTER TABLE 支持:ADD、DROP、EXCHANGE、MOVE、MODIFY、RENAME、SPLIT、TRUNCATE 分區。
頻繁 DELETE/INSERT 導致索引結構中「已刪除條目空間無法重用」,索引段持續膨脹,**即使表行數不變,索引大小卻持續增長**。
ALTER INDEX index_name REBUILD;
ALTER INDEX ... REBUILD ONLINE:無鎖重建,業務零中斷DBMS_STATS.GATHER_INDEX_STATS 同步更新統計信息INDEX_STATS.HEIGHT、LF_BLKS、DEL_LF_ROWS 判斷重建時機INITIAL/NEXT/MINEXTENTS 使單擴展滿足ALTER TABLE ... MOVE TABLESPACE ... 重組到新表空間(需鎖表),或 DBMS_REDEFINITION 職線重組(11g+)三者結合,構建 Oracle 性能穩態的基石。**預防勝於治療:設計階段規劃分區策略、預分配空間、建立定期維護作業**,遠勝事後補救。