首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 分區表降低磁碟 I/O 衝突:三大分區模式選型指南

     編輯:Oracle 資料庫基礎

背景痛點

單表 500 萬筆,所有資料放在同一顆實體磁碟,併發存取產生嚴重 I/O 等待。解法:分區表 + 多磁碟/表空間分散,將不同分區置於不同物理磁碟,I/O 吞吐成倍提升。

分區表核心原理

  • 查詢/備份僅掃描所需分區(Partition Pruning),而非全表。
  • 不同分區對應不同表空間 → 不同磁碟 → 並行 I/O 無競爭。
  • 備份彈性:可針對單一分區備份(如法規異動頻繁的原料資訊分區單獨備份),縮短窗口、降低衝突。

前提:分區必須落在不同磁碟/表空間,否則無效果。

三大分區模式選型決策樹

1. 範圍/列表分區—— 依業務欄位切分

適用:資料有明顯分類欄位(產品類別、交易日期、地區代碼)。

CREATE TABLE product_info (
  prod_id NUMBER,
  prod_type VARCHAR2(20),  -- '成品','零件','包裝'
  ...
)
PARTITION BY LIST (prod_type) (
  PARTITION p_finished VALUES ('成品') TABLESPACE ts_finished,
  PARTITION p_parts    VALUES ('零件') TABLESPACE ts_parts,
  PARTITION p_packing  VALUES ('包裝') TABLESPACE ts_packing
);
  • 查詢指定分區:SELECT * FROM product_info PARTITION (p_finished);
  • 備份指定分區:RMAN BACKUP TABLESPACE ts_finished;

2. 直行分區—— 大欄位隔離

適用:表含大型 LOB/圖片欄位(身分證影本、簽名檔),平時查詢不需讀取,且異動頻率極低。

CREATE TABLE emp_info (
  emp_id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  id_card_photo BLOB
)
LOB (id_card_photo) STORE AS (
  TABLESPACE ts_lob  -- 獨立磁碟
);

Oracle 11g+ 支援 SECUREFILE 壓縮/去重,進一步降低 LOB 磁碟佔用。

3. 雜湊分區—— 無明顯切分鍵時

適用:資料分布均勻、無業務切分鍵、需平行度提升。

CREATE TABLE big_log (
  log_id NUMBER,
  log_ts TIMESTAMP,
  msg VARCHAR2(4000)
)
PARTITION BY HASH (log_id) PARTITIONS 8  -- 2^n 取得均勻分布
STORE IN (ts_hash1, ts_hash2, ts_hash3, ts_hash4);

重大限制:僅支援本地索引,全域索引不可用。若查詢高度依賴全域索引,雜湊分區可能得不償失。

效能驗證指標

查詢 V$FILESTAT 或 DBA_HIST_FILESTATXS 觀察 AVG_READ_TIME、AVG_WRITE_TIME,若特定檔案明顯較高 → 該磁碟為熱點,需分散。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved