extent分配策略以及11g新程式SMCO

myownstars發表於2013-06-06

Extent有兩種分配策略:autoallocateuniform,在建立表空間時指定,一旦建立不可更改

Uniform預設為1M

Autoallocateextent64K起直至擴充套件到64M,對應關係如下表

Segment Size Preferred Next Extent Size
============ ==========================
Upto 1m ------------------&gt64k
Upto 64m -------------------&gt1m
Upto 1g -------------------&gt8m
Above 1g ------------------&gt64m

11202引入隱含引數"_partition_large_extents"(預設為true),所有分割槽表預設initial extent8M,另有"_index_partition_large_extents "(預設false)用於索引分割槽;

過小的extent不但消耗SGA,還會影響全表掃描的效能(見注1)

 

ASM extent1個或多個AU組成,ASM使用可變大小的extent用於降低大資料庫對SGA的消耗,規則如下:

0-19999區間,extent=AU

20000-39999區間,extent=4*AU

40000+區間,extent=16*AU

注:磁碟組compatible>=11.1

 

 

引數

建立表時可指定initial/minextents/next引數,三者與uniform協同工作,關係如下:

minextents=1時,分配max(initial, uniform)

大於1時,分配max(initial extent, uniform) + (n-1) * size

如果指定了nextsize=next,否則size=uniform

 

測試

create tablespace test

datafile '/u01/app/oracle/oradata/KBCOOK/test01.dbf' size 50m

extent management local uniform. size 1m;

 

CASE 1

SQL> create table test_tab (col1 varchar2(2)) tablespace test storage(initial 65535 minextents 2);

SQL> select bytes from dba_extents where segment_name = 'TEST_TAB';

     BYTES

----------

   1048576

   1048576

 

CASE 2

SQL> create table test_tab (col1 varchar2(2)) tablespace test storage(initial 1m minextents 5);

Table created.

SQL> select bytes from dba_extents where segment_name = 'TEST_TAB';

     BYTES

----------

   1048576

   1048576

   1048576

   1048576

   1048576

 

CASE 3

SQL> create table test_tab (col1 varchar2(2)) tablespace test storage(initial 2m minextents 2);

SQL> select bytes from dba_extents where segment_name = 'TEST_TAB';

     BYTES

----------

   1048576

   1048576

   1048576

 

CASE 4

SQL> create table test_tab (col1 varchar2(2)) tablespace test storage(initial 2m next 3m minextents 3);

Table created.

SQL> select bytes from dba_extents where segment_name = 'TEST_TAB';

 

     BYTES

----------

   1048576

   1048576

   1048576

   1048576

   1048576

   1048576

   1048576

   1048576

 

 

Extent預分配

11g引入extent pre-allocation特性,由SMCO(space management coordinator)負責,其動態spawn子程式Wnnn用於空間分配和回收;

SMCO功能:

1

Extent預分配

資料檔案須開啟autoextendSMCO依據歷史資訊,在表空間裡所有尚未達到 maxsize的資料檔案間均勻的分配擴充套件;

2

回收臨時段

3

Securefile lob預擴充套件/回收

 

如何開啟/關閉SMCO

--可動態修改

ALTER SYSTEM SET "_ENABLE_SPACE_PREALLOCATION" = 0;--關閉

ALTER SYSTEM SET "_ENABLE_SPACE_PREALLOCATION" = 3;--啟用

 

此特性有時會產生意料之外的結果,譬如資料檔案擴充套件到maxsize(但實際資料沒有這麼大)

In 11g, the system tries to keep free extent in the tablespace ahead of time based on allocation projection. In this test case, continuous insert operations caused the tablespace growth rate to be very high, therefore, system "over" extended the tablespace, where the free space cushion is far more than the NEXT value specified by user

AUTOEXTEND Grows To Full Size Without Reason [ID 1459097.1]

Why The Data Files Got Extended Up Over The Weekend [ID 1538442.1]

 

 

 

1

db_file_multiblock_read_count決定一次IO最大讀取塊數,用於全表或快速全索引掃描;

當系統只有非工作量統計資訊時,在計算多塊讀的IO cost公式中充當分母,即值越大oracle越傾向選擇全表或快速全索引掃描;

有工作量統計資訊時,系統改用MBRC

http://space.itpub.net/15480802/viewspace-739468

並非所有多塊讀IO一次都讀取db_file_multiblock_read_count規定的數量,受如下因素限制:

段頭只能單塊讀;

不能垮越 extent

如果extent中部分塊已經快取,除非直接讀,否則不會重新讀取

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-763188/,如需轉載,請註明出處,否則將追究法律責任。

相關文章