Oracle ASSM改善分段存儲(chǔ)是什么?
以下的文章主要介紹的是Oracle ASSM改善分段存儲(chǔ),在實(shí)際的操作中我們?yōu)榱吮3制渥顬閺?qiáng)大與最為靈活的相關(guān)數(shù)據(jù)庫地位,所以O(shè)racle公司最近發(fā)布的幾個(gè)相關(guān)版本里一直都在創(chuàng)建新的機(jī)制來對(duì)表格和索引的存儲(chǔ)進(jìn)行簡(jiǎn)化和分塊。
從Oracle8i開始,Oracle開始在tablespace內(nèi)部將對(duì)象管理進(jìn)行自動(dòng)化。第一個(gè)增強(qiáng)的地方原來叫做本地管理tablespace(或者簡(jiǎn)寫作LMT)。在LMT里,Oracle將tablespace里的信息從數(shù)據(jù)字典的表格空間里移出去,而直接將其保存到tablespace自身里。這在Oracle9i里已經(jīng)成為了一個(gè)事實(shí)的標(biāo)準(zhǔn),因?yàn)樗鼫p輕了數(shù)據(jù)字典的負(fù)擔(dān)。
表格空間的第二個(gè)主要增強(qiáng)的是自動(dòng)分段空間管理(ASSM),它首次出現(xiàn)在Oracle9i里。有了OracleASSM,鏈接列表freelist被位圖所取代,它是一個(gè)二進(jìn)制的數(shù)組,能夠迅速有效地管理存儲(chǔ)擴(kuò)展和剩余區(qū)塊(free block),因此能夠改善分段存儲(chǔ)本質(zhì)。
管理空間的兩種方法
讓我們從比較這兩種空間管理開始:
本地管理tablespace(LMT)——LMT是通過把EXTENT MANAGEMENT LOCAL子句添加到tablespace的定義句法而實(shí)現(xiàn)的。和原來由字典管理的tablespace(DMT)不同,LMT會(huì)將擴(kuò)展管理自動(dòng)化,并保持Oracle DBA不會(huì)被用來指定管理擴(kuò)展大小的NEXT存儲(chǔ)參數(shù)。這個(gè)原則唯一的例外是在NEXT和MINEXTENTS一起用在表格創(chuàng)建的時(shí)候。
自動(dòng)區(qū)段空間管理(ASSM)——ASSM的tablespace是通過將SEGMENT SPACE MANAGEMENT AUTO子句添加到tablespace的定義句法里而實(shí)現(xiàn)的。通過使用位圖freelist取代傳統(tǒng)單向的鏈接列表freelist,Oracle ASSM的tablespace會(huì)將freelist的管理自動(dòng)化,并取消為獨(dú)立的表格和索引指定PCTUSED、FREELISTS和FREELIST GROUPS存儲(chǔ)參數(shù)的能力。
Oracle值得贊揚(yáng)的地方是,這兩個(gè)空間管理的方法都是可選的特性,而且Oracle的老手可能仍會(huì)使用更加詳細(xì)的方法,只要他們?cè)敢獾脑?。要注意,位圖區(qū)段管理在Oracle9i里是可選的,而且只能在tablespace這一層實(shí)現(xiàn),這一點(diǎn)是十分重要的。原有的系統(tǒng)還能夠繼續(xù)使用傳統(tǒng)方法來管理freelist。
位圖freelist挑戰(zhàn)傳統(tǒng)的空間管理
在我討論位圖freelist和傳統(tǒng)的空間管理之前,讓我們看看位圖freelist是如何實(shí)現(xiàn)的。我會(huì)從使用區(qū)段空間管理自動(dòng)參數(shù)創(chuàng)建tablespace開始:
- create tablespace
- asm_lmt_ts
- datafile
- 'c:\oracle\oradata\diogenes\asm_lmt.dbf'
- size
- 5m
- EXTENT MANAGEMENT LOCAL -- Turn on LMT
- SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM
- ;
一旦你定義好了tablespace,那么表格和索引就能夠使用各種方法很容易地被移動(dòng)到新的tablespace里。下面就是我進(jìn)行創(chuàng)建的代碼:
- create table
- new_cust
- tablespace
- assm_lmt_ts
- as
- select * from customer;
- alter index cust_name_idx rebuild tablespace assm_lmt_ts;
要注意,當(dāng)表格或者索引被分配到這個(gè)tablespace以后,用于獨(dú)立對(duì)象的PCTUSED的值會(huì)被忽略,而Oracle9i會(huì)使用位圖數(shù)組來自動(dòng)地管理tablespace里表格和索引的freelist。
對(duì)于在LMT的tablespace內(nèi)部創(chuàng)建的表格和索引而言,這個(gè)NEXT擴(kuò)展子句是過時(shí)的,因?yàn)橛杀镜毓芾淼膖ablespace會(huì)管理它們。但是,INITIAL參數(shù)仍然是需要的,因?yàn)镺racle不可能提前知道初始表格加載的大小。對(duì)于OracleASSM而言,INITIAL最小的值是三個(gè)區(qū)塊。
關(guān)于一個(gè)萬能的方法對(duì)于Oracle來說是否是最好的方法還有一些爭(zhēng)論。在大型數(shù)據(jù)庫里,單獨(dú)的對(duì)象設(shè)置會(huì)帶來性能和存儲(chǔ)上的巨大不同。
【編輯推薦】