聊聊分割槽Partition——我們為什麼要分割槽(中)
上篇我們介紹了Oracle分割槽表在效能方面的優勢,本篇集中在管理層面,討論下管理層面的優勢。
4、管理便捷性
相對於一個大資料物件(資料表、索引),分割槽化首先給我們帶來的就是管理便捷。一個很大的資料表,無論是進行資料表重構,還是儲存位置操作,都會面臨連帶負載問題。在生產環境下,這種負載變化尤其是我們希望避免的。
藉助分割槽,我們可以將大物件劃分為一系列小物件進行單獨處理。也就是將一個突然性的大操作轉變為一系列的小規模操作進行,從而減少對其他正在執行作業的影響。
下面是資料表T_PART,對應的本地索引。
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 SYSTEM
P2 SYSTEM
P3 SYSTEM
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 USABLE
P2 USABLE
P3 USABLE
當我們需要調整一個資料表分割槽的表空間,到users表空間,我們可以使用單獨的命令進行處理,而不會影響到其他資料。
SQL> alter table t_part move partition p1 tablespace users;
Table altered
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
P3 SYSTEM
針對分割槽索引,如果出現失效的情況,我們也是可以進行部分rebuild。
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 UNUSABLE
P2 USABLE
P3 USABLE
SQL> alter index idx_t_part_idp rebuild partition p1;
Index altered
SQL> select partition_name, status from dba_ind_partitions where index_owner='SYS' and index_name='IDX_T_PART_IDP';
PARTITION_NAME STATUS
------------------------------ --------
P1 USABLE
P2 USABLE
P3 USABLE
此外,Oracle提供的很多針對分割槽的操作,比如匯出特定分割槽資料、刪除分割槽資料等,都是管理便捷性的體現。
5、資料刪除
對大資料表,資料退出生命週期之後,就可以從資料表中進行刪除。從資料活躍性理論角度看,任何資料在資料表中都是有生命週期的,一旦經過了業務處理高峰期,就應該會在某個特定標準框架下被刪除。
大資料量刪除是應用運維領域一個比較麻煩的事情。因為通常情況下,刪除資料總數雖然很大,但是往往佔到全部資料表比例不高。比如,每次Purge資料,可能都是資料表中最老的一週資料,而資料表中包括了近三個月資料。
一種結合設計的手段是將分割槽融入到過程中,將一次刪除的資料放在相同的分割槽上,這樣有兩個好處。一個是可以將活性相同的資料放在相同位置上,避免低活性資料的影響。另一個是可以藉助分割槽層次上的操作手段,快速進行資料刪除操作。
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
P3 SYSTEM
SQL> set timing on;
SQL> alter table t_part drop partition p3;
Table altered
Executed in 0.453 seconds
SQL> select partition_name, tablespace_name from dba_segments where owner='SYS' and segment_name='T_PART';
PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------
P1 USERS
P2 SYSTEM
Executed in 0.015 seconds
注意:Drop Partition操作和普通的delete是有顯著性區別的。Delete操作的核心在於“打標記”。Server Process檢索所有符合條件的資料記錄,標記為刪除。這個過程的時間往往和資料量相關。
而Drop Partition是一個DDL過程,這個過程中,資料並沒有被刪除,而是資料表的分割槽定義發生了變化,讓Oracle“不再承認”分割槽的存在。這種方法刪除資料和Truncate Table有相似之處。優點是速度快,適合大資料分割槽表的刪除動作。
作為提醒注意一下,對於drop partition操作,Global Index和Local Index的行為是有差異的,這一點和上面move操作的結果相同。如果是Local Index,其他分割槽的變化並不影響本分割槽的索引作用。所以,Local Index還是存在的。但是,Global Index由於結構上的特殊性,需要進行額外的rebuild操作。
當然,我們可以在drop partition的時候,連帶加入update global indexes字句到drop partition命令中,實現自動的global索引重構。
SQL> create index idx_t_part_idg on t_part(object_name);
Index created
Executed in 0.983 seconds
SQL> alter table t_part drop partition p2 update global indexes;
Table altered
Executed in 0.609 seconds
SQL> select status from dba_indexes where owner='SYS' and index_name='IDX_T_PART_IDG';
STATUS
--------
VALID
Executed in 0.031 seconds
6、資料歸檔
歸檔Archive和刪除是有一些差別的。刪除表示的是資料不再需要,可以直接永久刪除。實際生產環境中,直接刪除的情況是比較少的,大部分情況是需要保留一個備份資料。只是將這個備份資料Offline出系統範圍。
這個時候,使用分割槽資料表技術,可以快速的進行歸檔動作,解除安裝資料。先準備資料。
SQL> drop table t_part;
Table dropped
Executed in 1.03 seconds
SQL> create table t_part
2 partition by list (owner)
3 (
4 partition p1 values('SYS'),
5 partition p2 values('PUBLIC'),
6 partition p3 values(default)
7 )
8 as
9 select * from dba_objects;
Table created
Executed in 1.856 seconds
我們希望歸檔P2資料,可以先建立一個空資料表作為載體。
SQL> create table t_arch_p2 as select * from t_part where 1=0;
Table created
Executed in 0.094 seconds
SQL> alter table t_part exchange partition p2 with table t_arch_p2;
Table altered
Executed in 0.094 seconds
SQL> select count(*) from t_arch_p2;
COUNT(*)
----------
27703
Executed in 0.047 seconds
Exchange partition操作是一種非常強大的工具。語句基於操作定義層面的變化,將資料分割槽和資料表定義轉換。所以,exchange partition操作的速度是非常有優勢的。
將分割槽拆分出資料表t_part,到t_arch_p2獨立資料表之後,我們接下來可以將其匯出資料庫或者備份到其他裝置上。
下面我們繼續看其他管理方面分割槽的用法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1825209/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊分割槽Partition——我們為什麼要分割槽(下)
- 聊聊分割槽Partition——我們為什麼要分割槽(上)
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- oracle partition分割槽_分割槽列為空測試(一)Oracle
- 非分割槽錶轉換為分割槽表和partition indexIndex
- ORACLE 範圍分割槽 partition-range分割槽Oracle
- 【實驗】【PARTITION】RANGE分割槽表截斷表分割槽(Truncate Partition)
- 【實驗】【PARTITION】RANGE分割槽表移動表分割槽(Move Partition)
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- 【實驗】【PARTITION】RANGE分割槽表合併分割槽
- 【實驗】【PARTITION】RANGE分割槽表增加分割槽
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- 分割槽表PARTITION table
- 為什麼要做Redis分割槽?Redis
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- 【實驗】【PARTITION】RANGE分割槽表重新命名錶分割槽(Rename Partition)
- Linux中什麼是分割槽?Linux分割槽有什麼好處?Linux
- 分割槽partition知識點
- MySQL分割槽(Partition)詳解MySql
- Oracle 分割槽(partition)技術Oracle
- Oracle分割槽表(Partition Table)Oracle
- 分割槽剪除 (partition pruning)
- 分割槽表PARTITION table(轉)
- 融合(merge partition)分割槽
- 合併分割槽(coalesce partition)
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- Spark學習——分割槽Partition數Spark
- oracle reference partition引用分割槽(一)Oracle
- 深入解析partition-range分割槽
- 深入解析partition-hash分割槽
- 深入解析partition-list 分割槽
- oracle list partition列表分割槽(一)Oracle
- 【實驗】【PARTITION】RANGE分割槽建立
- partition 分割槽表重新命名
- 資料庫分割槽表 什麼情況下需要分割槽資料庫