溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Oracle Bigfile Tablespace大文件表空間是怎么樣的

發(fā)布時(shí)間:2021-11-06 15:32:38 來(lái)源:億速云 閱讀:135 作者:柒染 欄目:建站服務(wù)器

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Oracle Bigfile Tablespace大文件表空間是怎么樣的,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

 

Oracle表空間Tablespace是邏輯結(jié)構(gòu)的最高層次,其他分別對(duì)應(yīng)段對(duì)象segment、區(qū)extent和塊block。而物理層面的Oracle數(shù)據(jù)庫(kù)是通過(guò)一系列的文件構(gòu)成,其中數(shù)據(jù)文件datafile是與Tablespace進(jìn)行對(duì)應(yīng)的對(duì)象。

 

 

TablespaceDatafile的關(guān)系是一對(duì)多的關(guān)系。一個(gè)表空間Tablespace可以對(duì)應(yīng)多個(gè)Datafile,Datafile則是只能歸屬在一個(gè)Tablespace里。傳統(tǒng)的Oracle管理概念中,倡導(dǎo)一個(gè)表空間中創(chuàng)建多個(gè)數(shù)據(jù)文件,特別是創(chuàng)建分布在多個(gè)存儲(chǔ)磁盤(pán)上,以期分散I/O。但是,Oracle10g推出的BigFile Tablespace大文件表空間,將這個(gè)概念有所變化。

 

 

1、  Bigfile tablespace

 

Oracle 10g中,推出了Bigfile tablespace的概念。表空間TablespaceOracle 10g以后就分為兩個(gè)類(lèi)型,smallfile tablespacebigfile tablespace。過(guò)去一個(gè)表空間對(duì)應(yīng)多個(gè)數(shù)據(jù)文件我們成為Smallfile Tablespace。

 

所謂Bigfile Tablespace最顯著的差別就是一個(gè)表空間只能對(duì)應(yīng)一個(gè)數(shù)據(jù)文件。Bigfile Tablespace雖只對(duì)應(yīng)一個(gè)數(shù)據(jù)文件,但數(shù)據(jù)文件對(duì)應(yīng)的最大體積大大增加。傳統(tǒng)的small datafile每個(gè)文件中最多包括4M個(gè)數(shù)據(jù)塊,按照一個(gè)數(shù)據(jù)塊8K的大小核算,最大文件大小為32G。每個(gè)Small Tablespace理論上能夠包括1024個(gè)數(shù)據(jù)文件,這樣計(jì)算理論的最大值為32TB大小。而Bigfile Datafile具有更強(qiáng)大的數(shù)據(jù)塊block容納能力,最多能夠包括4G個(gè)數(shù)據(jù)塊。同樣按照數(shù)據(jù)塊8K計(jì)算,Bigfile Datafile大小為32KG=32TB。理論上small tablespacebig tablespace總?cè)萘肯嗤?/span>

 

下面我們通過(guò)一連串的實(shí)驗(yàn)來(lái)觀察Bigfile Tablespace。

 

 

SQL> select * from v$version;

 

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE     10.2.0.1.0       Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

 

SQL> create bigfile tablespace bttest datafile 'D:\ORADATA\ORCL\BTTEST.dbf' size 10m autoextend off

  2  extent management local uniform. size 1m

  3  segment space management auto;

 

Tablespace created

 

 

此處,我們通過(guò)create bigfile tablespace語(yǔ)句建立Bigfile Tablespace。注意兩方面的問(wèn)題,其一是Bigfile Tablespace必須使用local本地extent管理方式,不允許使用DMTDictionary Managed Tablespace)。另一方面是段segment空間使用auto自動(dòng)方式,不要使用manual。

 

不過(guò)這兩個(gè)條件在Undo或者臨時(shí)Bigfile表空間的時(shí)候,是允許例外的。

 

Small TablespaceBigfile Tablespace是可以并存的。

 

 

SQL> select tablespace_name, bigfile from dba_tablespaces;

 

TABLESPACE_NAME                BIGFILE

 

11 rows selected

 

 

在創(chuàng)建bigfile tablespace的時(shí)候,就已經(jīng)指定了數(shù)據(jù)文件。如果此時(shí)我們嘗試加入一個(gè)新的數(shù)據(jù)文件,Oracle系統(tǒng)會(huì)報(bào)錯(cuò)。

 

 

SQL> alter tablespace bttest add datafile 'D:\ORADATA\ORCL\BTTEST02.dbf' size 10m autoextend off;

 

alter tablespace bttest add datafile 'D:\ORADATA\ORCL\BTTEST02.dbf' size 10m autoextend off

 

ORA-32771: 無(wú)法在大文件表空間中添加文件

 

 

下面我們分析一下bigfile tablespace的特性。

 

2Bigfile的相對(duì)文件編號(hào)

 

此處我們觀察一下Bigfile Tablespace體系下的一些特征。

 

 

SQL> select file_name, file_id, relative_fno from dba_data_files;

 

FILE_NAME                         FILE_ID RELATIVE_FNO

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

D:\ORADATA\ORCL\USERS01.DBF             4            4

D:\ORADATA\ORCL\SYSAUX01.DBF            3            3

D:\ORADATA\ORCL\UNDOTBS01.DBF           2            2

D:\ORADATA\ORCL\SYSTEM01.DBF            1            1

D:\ORADATA\ORCL\EXAMPLE01.DBF           5            5

D:\ORADATA\ORCL\SPTABLESPACE            6            6

D:\ORADATA\ORCL\QCDATA.DBF              7            7

D:\ORADATA\ORCL\BTTEST.DBF              8         1024

 

8 rows selected

 

 

每個(gè)文件都包括兩個(gè)編號(hào),一個(gè)是絕對(duì)文件編號(hào)file_id,另一個(gè)是相對(duì)文件編號(hào)relative_fno。在文件數(shù)量較少,或者創(chuàng)建刪除文件比較少情況下的數(shù)據(jù)庫(kù),file_idrelative_fno是相同的。Relative_fno是一個(gè)循環(huán)周期,以1024為一個(gè)循環(huán)。當(dāng)file_id依次遞增到1024整數(shù)倍之后,file_id會(huì)繼續(xù)增加,而relative_fno會(huì)形成一個(gè)內(nèi)部循環(huán)。

 

 

這種機(jī)制讓我們聯(lián)想起了Oracle Small Tablespace的數(shù)據(jù)文件上限限制,也是1023個(gè)文件。我們?cè)O(shè)想一種極端的情況,如果一個(gè)表空間中的數(shù)據(jù)文件個(gè)數(shù)超過(guò)了1024,也就是一個(gè)表空間內(nèi)的數(shù)據(jù)文件中,存在相同的relative_fno。這種情況首先是不被允許的。

 

 

設(shè)置1024relative_fno是進(jìn)行Oracle數(shù)據(jù)尋址的需要。這里我們要關(guān)注到Oracle定位數(shù)據(jù)行的rowid信息,rowidOracle內(nèi)部唯一標(biāo)注一行記錄的地址。Rowid包括四部分組成,對(duì)象號(hào)+文件號(hào)+塊號(hào)+slot行號(hào)。Rowid長(zhǎng)度固定,所以四部分的長(zhǎng)度都是固定的,這里的文件號(hào)fno是相對(duì)文件編號(hào)。這里的查找順序是,對(duì)象號(hào)獲取所在表空間的編號(hào),在表空間內(nèi)部使用相對(duì)文件號(hào)來(lái)定位到文件。如果一個(gè)表空間內(nèi)出現(xiàn)相同的relative_fno文件,定位就不可能了。所以,small tablepsace的內(nèi)部文件上限必然是1023。

 

 

但是,Bigfile Tablespace存在一些不同之處。如果一個(gè)表空間只有一個(gè)數(shù)據(jù)文件且只能擁有一個(gè)數(shù)據(jù)文件,那么relative_fno就失去了存在的意義。所以在dba_data_files中的relative_fno列上,bigfile tablespace對(duì)應(yīng)的datafile是直接1024

 

 

SQL> create table t_big tablespace bttest as select * from dba_tables;

Table created

 

SQL> select dbms_rowid.rowid_object(t.rowid) obj_id, dbms_rowid.rowid_relative_fno(t.rowid,'BIGFILE') relative_fno,

  2  dbms_rowid.rowid_block_number(t.rowid) block_num, dbms_rowid.rowid_row_number(t.rowid) rownums,

  3  dbms_rowid.rowid_to_absolute_fno(t.rowid,'SYS','T_BIG') abso_fno

  4  from t_BIG t where rownum<4;

 

    OBJ_ID RELATIVE_FNO  BLOCK_NUM    ROWNUMS   ABSO_FNO

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

     55707         1024         21          0          8

     55707         1024         21          1          8

     55707         1024         21          2          8

 

 

借助dbms_rowid包的相應(yīng)方法,我們也可以看清bigfile tablespacerowid行的relative_fno信息。

 

3、Bigfile Datafile大小探索

 

一個(gè)數(shù)據(jù)文件最大能有多大,在Oracle中有兩個(gè)因素控制,一個(gè)是Oracle內(nèi)部尋址能夠?qū)ふ业降淖畲蠓秶嗌賯€(gè)塊,另一個(gè)是數(shù)據(jù)庫(kù)每個(gè)塊大小是多大。

 

我們首先來(lái)看看Small Datafile的情況。Rowid是一個(gè)用16進(jìn)制表示的18位長(zhǎng)度類(lèi)字符串。其中,前6位表示object_id,之后3位表示文件編號(hào),之后6位表示塊號(hào),最后3位表示rowslot編號(hào)。

 

--語(yǔ)句摘自MOS[ID 1057891.6]

 

   SQL> select substr(rowid,1,6) "object",

               substr(rowid,7,3) "file",

               substr(rowid,10,6) "block",

               substr(rowid,16,3) "row"

       from test;

 

        object fil block  row

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

        AAABPW AAF AAAAv1 AAA

 

 

small datafile中,對(duì)數(shù)據(jù)塊有6×4=24位二進(jìn)制表示。Oracle利用中間的22位進(jìn)行塊地址存儲(chǔ)。這樣,22位二進(jìn)制可以表示的數(shù)據(jù)塊編號(hào)范圍為(2^22-1=4M個(gè)數(shù)據(jù)塊。如果按照每個(gè)數(shù)據(jù)塊8K的普遍大小計(jì)算,這樣每個(gè)small datafile大小上限就是32G。如果按照每個(gè)數(shù)據(jù)塊上限32K計(jì)算,這樣每個(gè)small datafile大小上限就是128G。

 

 

bigfile datafile中,事情有所不同。由于沒(méi)有relative_fno的問(wèn)題,這樣rowid中就不需要保存relative_fno的最多1024的數(shù)值。這樣就節(jié)省出10位二進(jìn)制位給數(shù)據(jù)塊定位,相同長(zhǎng)度的rowid就可以進(jìn)行32位二進(jìn)制長(zhǎng)度的數(shù)據(jù)塊尋址。每個(gè)bigfile datafile中,最多可以包括到(2^32-1=4G個(gè)數(shù)據(jù)塊。在數(shù)據(jù)塊大小8K的環(huán)境下,最大為32TB數(shù)據(jù)。如果是數(shù)據(jù)塊大小為32K環(huán)境下,文件最大可以到128TB大小。

 

 

4、結(jié)論和討論

 

在本文第一部分中,我們討論了Bigfile TablespaceSmall Tablespace的理論分析,兩者理論上最大容量值是一樣的。只是Bigfile的單個(gè)文件容量上限很大,我們?nèi)绾慰创@種新類(lèi)型呢?

 

首先,實(shí)際生產(chǎn)環(huán)境下,Bigfile Tablespace在應(yīng)對(duì)大數(shù)據(jù)量存儲(chǔ)的時(shí)候略有優(yōu)勢(shì)。因?yàn)?span lang="EN-US">Small Tablespace在實(shí)現(xiàn)相同的存儲(chǔ)大小時(shí),要消耗大量的多文件管理開(kāi)銷(xiāo)。同時(shí)控制文件為了維護(hù)多位置上的文件,協(xié)同檢查點(diǎn)和文件頭SCN等內(nèi)容,要消耗很大精力。

 

其次,Small Tablespace的存儲(chǔ)量只是理論,很少有系統(tǒng)真的建立上千個(gè)文件在一個(gè)表空間中。從這個(gè)角度看,Bigfile吸引力是不小的。

 

最后,Oracle對(duì)于Bigfile Tablespace支持是全面的。存儲(chǔ)層面上,ASM、Logical Volumn Manager/RAIDDynamically Extensible Logical VolumesOMF都提供了比較全面的支持。

 

 

但是,Bigfile Tablespace并不是萬(wàn)靈藥。BigfileOracle層面的Bigfile,并不涉及到OS層面的支持。使用Bigfile的時(shí)候,要選擇合適的底層存儲(chǔ)系統(tǒng)提供支持。此外,Bigfile的理念違背了我們過(guò)去宣稱(chēng)的I/O分散理論。所以,最好在有底層強(qiáng)大存儲(chǔ)支持(如ASM)的情況下使用Bigfile,達(dá)到最優(yōu)的性能平衡點(diǎn)。

上述就是小編為大家分享的Oracle Bigfile Tablespace大文件表空間是怎么樣的了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI