Oracle數據庫學習_Oracle分區表的分區占用空間為什么是8M?如何修改分區的初始空間?


現象一描述:

在oracle12c下創建一個分區表T_A_TRADING,新建一個分區P1,P1里沒有任何紀錄時,查user_segments表發現 PARTITION_name='P1'結果返回Null,說明此時P1是沒有分配空間的。

現象二描述:

當給分區P1僅插入一條記錄時,查user_segments表發現 PARTITION_name='P1'結果返回:

segment_name  partition_name  (bytes/1024/1024)

---------------------------------------------------------------------------------------

T_A_TRADING  P20200220     8

發現這個分區占用的空間達到了8M,盡管只有一條記錄。

原因分析:

上面兩種現象的發生是由oracle12C的延遲段特性造成的,下面詳細介紹一下這個特性的由來和用法。

11gR2之前的版本中,當創建一張表時,會自動分配段空間。

  • 創建普通表時,每個分區默認占用空間大小為0.0625m(64k)。
  • 創建分區表時,每個分區默認占用空間大小為8M,是由_partition_large_extents參數控制,可以算是11.2.0.2開始的一個新特性,為了減少extent數量,提高分區表性能,而設置的一個參數,默認為true,即分區表的每個extent為8M。
  • 創建普通索引和分區索引的默認大小也是64k,由系統參數_index_partition_large_extents控制(true-開;false-關),默認為true。

這樣做有幾個弊端:

1. 初始創建表時就需要分配空間,自然會占用一些時間,如果初始化多張表,這種影響就被放大。

2. 如果很多表開始的一段時間都不需要,那么就會浪費這些空間。

3. 如果數據量較大,而且數據分布較為均勻,建議設置_partition_large_extents為true。

為此,從11gR2開始,有一種新特性,叫延遲段,即延遲分配段空間。簡單講,默認將表(以及索引、LOB)的物理空間分配推遲到第一條記錄插入到表中時。即有實際的數據插入表中時,再為每個對象初始化空間分配。延遲段是否開啟由系統參數deferred_segment_creation決定(true-開;false-關)。

 

修改分區初始空間的辦法:

一、可以通過修改這個系統參數來改變分區的初始空間。

參數修改語句:

alter system set "_parition_large_extents"=false scope = both

有人指出,這個修改需要修改數據庫的安裝指導和統裝腳本,然后再加上這個參數的修改才行。

有位博主測試過這種方法,最后他發現_partition_large_extents參數確實是能夠控制分區表的extent大小,鏈接:https://www.cnblogs.com/wcwen1990/p/6656545.html。

我沒有試過這種方法,感覺危險系數較高。。。

二、指定分區表分區初始大小,參考非分區表的初始空間很小,為64K。

create table t_testuser
(
operateid number(20) not null,
logtime date default cast(current_timestamp at time zone '00:00' as date) not null
)

-- 創建分區
partition by range(logtime)
(
partition beforedata values less than (to_date('2019-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')),
partition P20190110 values less than (to_date('2019-01-10 00:00:00','yyyy-mm-dd hh24:mi:ss')),
partition P20190115 values less than (to_date('2019-01-15 00:00:00','yyyy-mm-dd hh24:mi:ss')),
partition P20190120 values less than (to_date('2019-01-20 00:00:00','yyyy-mm-dd hh24:mi:ss'))
)
tablespace ring  --一般方法建分區使用默認的初始空間8M,不用加后面的設置語句;
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM