歡迎光臨
每天分享高質量文章

Oracle分割槽技術特性詳細解讀

 

 

 

老張拉呱:thomas zhang,甲骨文雲平臺事業部資深技術顧問,2008年加入甲骨文公司資料庫諮詢部門,10+年甲骨文解決方案諮詢支援經驗,資深系統工程師、Oracle OCM認證專家,具有豐富的Cloud /IT專案經驗。目前主要負責甲骨文中國北方區(醫院/衛生、交通、製造、教育、政府、證券、媒體、金融、零售等行業)客戶的資料庫、中介軟體、IaaS/PaaS、整合系統等相關技術解決方案諮詢工作。

 

簽名:我為人人,人人為我,三人行,必有我師。

新浪微博: http://weibo.com/tomszrp

Oracle 的分割槽是一種“分而治之”的技術,透過將大表、索引分成可以獨立管理的、小的 Segment,從而避免了對每個物件作為一個大的、單獨的 Segment 進行管理,為海量資料訪問提供了可伸縮的效能。自從 Oracle 引入分割槽技術以來,Oracle 公司在每次推出重要版本時都會對分割槽方法或功能上有所增強。從後面的分割槽方法中我們也可以清晰的看到 Oracle 分割槽技術的發展、成長歷程。Oracle 公司一直在致力於不斷完善分割槽技術,確保滿足所有的業務需求。

 

版本 新支援的分割槽方法 說明
7.3.x 邏輯分割槽/分割槽檢視 ◊在Oracle  8版本前,DBAs和Consultants  根據系統需要實現了”Home-Grown”(自產的/土生土長的)分割槽方法,他們藉助UNION-ALL  Views或Partition  Views(7.3開始提供的分割槽檢視,需要配合初始化引數PARTITION_VIEW_ENABLED=TRUE來使用Optimizer  Prunes特性)實現,即使到今天,如果不採購Oracle  Database Enterprise Edition下的Partitioning  Option License,從許可上來講,也必須藉助這種Home-Grown的方法來實現。
◊這種方法對DML是不透明的

◊Partition  Views in 7.3: Examples and Tests (檔案 ID 43194.1)

8.0.x Oracle  8.5 開始支援分割槽表/索引,

首先提供範圍分割槽(range)

1)使Oracle成為了第一個支援物理分割槽的RDBMS供應商
2)Oracle  8 僅支援表和索引級的分割槽(  Clustered tables/indexes and snapshots are not supported)
3)Oracle  8中不可以update  partition key columns,否則會遇到ORA-14402錯誤
4)只實現了靜態的分割槽裁剪功能

5)支援索引的Local  and global Range

8i 新增加希分割槽(hash)

開始支援範圍-雜湊複合分割槽(range-hash)

8.1.7實現了動態智慧裁剪(Dynamic  partition pruning)和智慧連線(Partition-wise  joins)
9iR1 新增串列分割槽(list)

開始支援全域性索引維護

1)在9i(9.0.1)之前, IOT表只支援range分割槽,實際上是從8.1.5版本開始支援對IOT的range分割槽
2)從9i開始支援對IOT的range、hash分割槽
3)在9iR2  hash分割槽支援IOT表中包含lob列(9i中暫不支援包含lob型別的IOT  hash 分割槽)

4)支援Global  index maintenance

9iR2 開始支援範圍-串列複合分割槽(range-list) 1)Fast Split
2)DEFAULT  Partition for LIST
10gR1 1)增加了對索引組織表(IOT)  串列(list)分割槽功能
2)增加了對全域性分割槽索引的hash分割槽策略
3)10gR2開始一個表可以支援1024K-1個分割槽(以前是64K-1)
1)擴充套件了global  indexes on partitioned IOTs的維護支援
2)Local  partitioned bitmap indexes on partitioned IOTs
3)LOB  columns are now supported in all types of partitioned IOTs.

4)fast  split partition支援分割槽IOT表

10gR2
11g Interval  Partitioning 實現了範圍分割槽的自動化
System  Partitioning(系統分割槽) 在這個新的型別中,我們不需要指定任何分割槽鍵,資料會進入哪個分割槽完全由應用程式決定,實際上也就是由SQL來決定,終於我們在Insert陳述句中可以指定插入哪個分割槽了
More  Composite Partitioning (更多的複合分割槽) 在9i、10g中,複合分割槽只支援Range-List和Range-Hash
在11gR1中複合分割槽的型別大大增加,現在Range,List,Interval都可以作為Top level分割槽,而Second level則可以是Range,List,Hash,也就是在11gR1中可以有3*3=9種複合分割槽,可以滿足更多的業務需要.
11gR2中,又增加了hash-hash複合分割槽
Reference  Partitioning(外來鍵也叫取用分割槽) 分割槽方案的引入是以相關表格透過相同的分割槽策略獲得好處作為前提設想的。Detail表格透過PK-FK關係從master表格繼承相同的分割槽方案.我們不需要把分割槽鍵儲存在detail表格中,透過關鍵詞“PARTITION BY REFERENCE,detail表格獲得master表格的分割槽方案
虛擬列分割槽(Virtual Column-Based  Partitioning) 在11g之前,只有分割槽鍵存在於表格中才可以實現對錶格的分割槽功能。而Oracle  11g的新功能“虛擬列”打破了這一限制,允許透過使用表格中的一列或多列的計算式作為分割槽鍵。
分割槽建議器 SQL  Access Advisor 不但可以為索引、物化檢視和物化檢視日誌提供建議,還可以生成分割槽建議。執行  SQL Access Advisor 生成的建議,您將會看到預期的效能收益。可以手動實施生成的指令碼,也可以將其提交給  Oracle Enterprise Manager 中的一個佇列。藉助分割槽建議擴充套件,客戶不僅可以獲得專門針對分割槽的建議,還可以獲得  SQL Access Advisor 的更全面的整體建議,從而在總體上提高  SQL 陳述句的整體效能。

Partition  Advisor 已整合到  SQL Access Advisor 中,是  Oracle Tuning Pack(一個額外的許可選件)的組成部分。

12cR1 Online  Partition 維護 1)線上移動、壓縮分割槽或子分割槽,不阻賽DML操作

      alter table sales move partition p1  tablespace lowtbs update indexes online;

      alter table sales move partition p1 ROW STORE COMPRESS BASIC update  indexes online;
alter table sales move  partition p1 ROW STORE COMPRESS ADVANCED  update indexes online;
alter table sales move  partition p1 COLUMN STORE COMPRESS FOR  QUERY LOW update indexes online;
alter table sales move  partition p1 COLUMN STORE COMPRESS FOR  QUERY HIGH update indexes online;
alter table sales move  partition p1 COLUMN STORE COMPRESS FOR  ARCHIVE LOW update indexes online;
alter table sales move  partition p1 COLUMN STORE COMPRESS FOR  ARCHIVE HIGH update indexes online;

 

      select table_name,compression,compress_for  from dba_tables;
select table_name,partition_name, compression,compress_for  from dba_tab_partitions;

      參見示例

2)Restrictions on the ONLINE Clause  –詳見官方檔案裡的說明
(1)不支援sys使用者下表
(2)不支援索引組織表(IOT)
(3)不支援包含物件型別或bitmap  join indexes以及domain  indexes的表
(4)當開啟database-level  supplemental logging 時不支援online維護
(5)Parallel  DML and direct path INSERT operations require an  exclusive lock on the table. 所以,  these operations are not supported concurrently with an ongoing online  partition MOVE, due to conflicting locks.

Reference  Partitioning的增強 1)支援Interval-Reference分割槽
2)提供truncate  partition、exchange  [SUB]partition操作的CASCADE級聯選項
多分割槽維護操作 add/truncate/drop/split/merge分割槽操作允許在一個操作中一次操作多個分割槽
部分索引 Local和Global indexes可以在部分分割槽上建立,這個特性(Partial  Indexing on Partitioned Tables)是透過表表上的indexing屬性來控制的。註意,部分索引不能建立全域性唯一索引。
全域性索引非同步維護 1)對於Drop和Truncate  Parition 操作,支援非同步維護全域性索引,Update  Indexes字句僅僅維護metadata,真正的索引維護是透過一個JOB(SYS.PMO_DEFERRED_GIDX_MAINT_JOB)非同步完成的。預設情況下該job是每天凌晨2:00執行,也可手工呼叫dbms_part.cleanup_gidx來完成

      PROCEDURE CLEANUP_GIDX                  – To clean up the global indexes
PROCEDURE CLEANUP_GIDX_INTERNAL  – To clean up the internal tables
PROCEDURE CLEANUP_ONLINE_OP        – To clean up the online partition movements

2)DBA_INDEXES  和DBA_IND_PARTITIONS新增加了ORPHANED_ENTRIES列。該列用來指出whether  or not a global index (partition) contains stale entries due to deferred  index maintenance during DROP/TRUNCATE PARTITION, or MODIFY PARTITION  operations. 有三種取值:
YES: The index (partition) contains  orphaned entries
NO: The index (partition) does  not contain any orphaned entries
N/A: The property is not applicable –  this is the case for local indexes, or indexes on non-partitioned tables.

12cR2 Multi-Column  List Partition 1)12.2.0.1.0開始支援,最大16個列

2)支援分割槽和子分割槽

3)支援heap  tables、external  tables

4)支援Reference  Partitioning and Auto-List

Auto-List  Partitioning 1)實現了list分割槽的自動化管理,類似11g版本開始支援的Interval  Partitioning

2)沒有default分割槽,必須至少指定一個分割槽

3)系統自動增加的分割槽會自動命名

4)list分割槽到Auto-List可以轉換,前提是List分割槽表定義上沒有DEFAULT分割槽

Interval  Subpartioning 1)  從11g版本中開始支援的Interval  Partitioning技術不支援子分割槽,從12cR2版本開始支援。

2)  Interval Subpartioning和Interval  Partitioning的使用條件及要求是一樣的,如:

     –沒有MAXVALUE

     –沒有Add  Partition

3)  Interval-subpartitoning strategy set at table level
–Subpartiton template mandatory
–Interval identical for all partitions

4)  每個表最大100萬個[sub]partitions

     –From one partition with one million subpartitions ..
–..To one million partitions with one subpartition each

Partitioned  External Tables Partitioned  external tables will provide both the functionality to map partitioned Hive  tables into the Oracle ecosystem as well as providing declarative  partitioning on top of any Hadoop Distributed File System (HDFS) based data  store.
分割槽與Sharding –資料垂直分割槽到多個獨立的資料庫中
–線性擴充套件
–自動部署
–支援HASH、RANGE、LIST和複合方式的自動資料分割槽
–自動Rebalance和Resharding
分割槽表相關維護維護方面的增強
Online分割槽維護(DDL)的 11g Create  index
Add column
Add constraint
12cR1 Drop  index
Drop Constraint
Alter table set unused column
Alter table move partition
12cR2 Alter  table modify non-partitioned table to partitioned table
Alter table move online for heap tables

Alter  table split partition online

Filtered分割槽維護操作 該特性允許我們在維護(Move/merge/split)分割槽表的時候進行資料過濾

alter table orders_move_part
move partition Q1_2015 tablespace tbs_archive compress
INCLUDE ROWS where order_state=’open’;

快速建立分割槽交換中間表 Oracle  Database 12c 第 2 版中的FOR EXCHANGE WITH子句消除了分割槽交換的檢測性工作,Indexes  are not created as part of this command. eg:

create table  sales_exch for exchange with sales;

只讀分割槽 分割槽/子分割槽可以被設定為read  only或read  write(default)。

註意:只讀分割槽不允許drop,但對應的base  table是可以被drop的,所以不要寄望於這個做更加級別的安全保護,還是要配合許可權和其他安全措施來保護。

tips:這樣從12cR2/18c開始,可以做到Service->Oracle_Home->Instance–>PDB->Tablespace  ->Table/MV/外部表->Partition->subpartition等各個級別的只讀設定,配合物件只讀許可權(read)、系統只讀許可權(read  any table)及Schema  Only Accounts等特性,可以滿足各個層次的資料保護需求。

18c 18.1.0 Enhanced  Parallel Partition-wise Operations

參見這裡

·         Partition-Wise  Operations

·         Partition-Wise  Joins in a Data Warehouse

相關知識:Partition-Wise  Operations – New Features in 12c and 18c

Modifying  the Partitioning Strategy 參見這裡的檔案說明。
Online  Merging of Partitions and Subpartitions

這是18c(18.1.0)中針對分割槽技術的一個很酷的改進,在不影響業務的情況下,可以線上合併分割槽或子分割槽。參見這裡的檔案說明。

19c 19.2 Hybrid  partitioned tables–混合分割槽表

 

原創:老張拉呱

    贊(0)

    分享創造快樂