網頁

2021/3/8

Oracle 資料表分割 table partitioning

最近工作中碰到某資料表資料過多導致查詢效能低落,DBA計畫以資料表分割(partitioning)的方式來解決,才了解到原來資料庫還有這特別的功能。

Oracle Partitioning資料表分割功能只有Oracle 企業版(Oracle Enterprise Edition, EE)才有,標準版(Standard Edition 2, SE2)並無此功能


資料表分割就是把一張資料表的資料分散儲存在數個分割(partitions),好處如下:

  • 減少資料管理操作的時間。資料載入,備份,復原,建立索引及索引重建等資料管理操作上以分割層級進行比在整張資料表層級快速。
  • 改善SQL查詢效能。查詢時只需查對映的分割(partition pruning),不用查詢整張表。
  • 減少資料維護作業的影響。分割彼此獨立,可同時對不同的分割資料進行維護。
  • 平行執行(Parallel execution)。對SQL查詢、DML及DDL的平行執行可最佳化資源利用並最小化執行時間。
  • 應用層的SQL無需修改。資料表分割對應用程式並無影響,對應用層來說仍是存取該資料表。

在業務上資料表分割對改善資料量大的資料表的查詢效能非常有用,例如是日誌、開盤紀錄、交易紀錄、訂單資料,會員點數資料等。除了改善查詢效能,刪除過時可丟棄的資料時僅需對該分割執行DROP即可。

而在沒有資料分割功能的資料庫為了改善這些累積大量資料的資料表進行效能改善,在設計上會依某個屬性分為多個表來存放,最常見的分割依據就是時間,例如把一整年的資料分散到1-12月份表來存放,或是按地理區域、伺服器群組等來分割。不過這樣應用層在存取時就要特別注意存取的邏輯,也要自行處理跨分割資料表的邏輯。


沒有留言:

張貼留言