国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle數(shù)據(jù)庫中利用ASSM改善分段存儲

2024-08-29 13:33:35
字體:
供稿:網(wǎng)友
    為了保持其最強(qiáng)大和最靈活數(shù)據(jù)庫的地位,Oracle在最近發(fā)布的幾個版本里一直都在創(chuàng)建新的機(jī)制來對表格和索引的存儲進(jìn)行簡化和分塊。從Oracle8i開始,Oracle開始在tablespace內(nèi)部將對象治理進(jìn)行自動化。 第一個增強(qiáng)的地方原來叫做本地治理tablespace(或者簡寫作LMT)。在LMT里,Oracle將tablespace里的信息從數(shù)據(jù)字典的表格空間里移出去,而直接將其保存到tablespace自身里。這在Oracle9i里已經(jīng)成為了一個事實的標(biāo)準(zhǔn),因為它減輕了數(shù)據(jù)字典的負(fù)擔(dān)。     表格空間的第二個主要增強(qiáng)的是自動分段空間治理(ASSM),它首次出現(xiàn)在Oracle9i里。有了ASSM,鏈接列表freelist被位圖所取代,它是一個二進(jìn)制的數(shù)組,能夠迅速有效地治理存儲擴(kuò)展和剩余區(qū)塊(free block),因此能夠改善分段存儲本質(zhì)。     治理空間的兩種方法     讓我們從比較這兩種空間治理開始:     本地治理tablespace(LMT)——LMT是通過把EXTENT MANAGEMENT LOCAL子句添加到tablespace的定義句法而實現(xiàn)的。和原來由字典治理的tablespace(DMT)不同,LMT會將擴(kuò)展治理自動化,并保持Oracle DBA不會被用來指定治理擴(kuò)展大小的NEXT存儲參數(shù)。這個原則唯一的例外是在NEXT和MINEXTENTS一起用在表格創(chuàng)建的時候。     自動區(qū)段空間治理(ASSM)——ASSM的tablespace是通過將SEGMENT SPACE MANAGEMENT AUTO子句添加到tablespace的定義句法里而實現(xiàn)的。通過使用位圖freelist取代傳統(tǒng)單向的鏈接列表freelist,ASSM的tablespace會將freelist的治理自動化,并取消為獨立的表格和索引指定PCTUSED、FREELISTS和FREELIST GROUPS存儲參數(shù)的能力。     Oracle值得贊揚的地方是,這兩個空間治理的方法都是可選的特性,而且Oracle的老手可能仍會使用更加具體的方法,只要他們愿意的話。要注重,位圖區(qū)段治理在Oracle9i里是可選的,而且只能在tablespace這一層實現(xiàn),這一點是十分重要的。原有的系統(tǒng)還能夠繼續(xù)使用傳統(tǒng)方法來治理freelist。     位圖freelist挑戰(zhàn)傳統(tǒng)的空間治理     在我討論位圖freelist和傳統(tǒng)的空間治理之前,讓我們看看位圖freelist是如何實現(xiàn)的。我會從使用區(qū)段空間治理自動參數(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,那么表格和索引就能夠使用各種方法很輕易地被移動到新的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)表格或者索引被分配到這個tablespace以后,用于獨立對象的PCTUSED的值會被忽略,而Oracle9i會使用位圖數(shù)組來自動地治理tablespace里表格和索引的freelist。對于在LMT的tablespace內(nèi)部創(chuàng)建的表格和索引而言,這個NEXT擴(kuò)展子句是過時的,因為由本地治理的tablespace會治理它們。但是,INITIAL參數(shù)仍然是需要的,因為Oracle不可能提前知道初始表格加載的大小。對于ASSM而言,INITIAL最小的值是三個區(qū)塊。     關(guān)于一個萬能的方法對于Oracle來說是否是最好的方法還有一些爭論。在大型數(shù)據(jù)庫里,單獨的對象設(shè)置會帶來性能和存儲上的巨大不同。
PCTFREE的問題     PCTFREE參數(shù)是用來指定數(shù)據(jù)塊剩余空間大小的,這一空間為將來數(shù)據(jù)行的擴(kuò)展而保留。假如PCTFREE設(shè)置得不得當(dāng),SQL的更新聲明就可能導(dǎo)致大量的數(shù)據(jù)行碎片和斷鏈。     數(shù)據(jù)行在剛保存的時候還很小,而在后來進(jìn)行了擴(kuò)展,在這種情況下,PCTFREE的設(shè)置就顯得尤其重要了。在這樣的系統(tǒng)里,通常會把PCTFREE設(shè)置成等于95,這就告訴Oracle要為數(shù)據(jù)行今后的擴(kuò)展保留95%的數(shù)據(jù)區(qū)段空間。     PCTUSED的問題     對PCTUSED不正確的設(shè)置(例如設(shè)得太小了)會導(dǎo)致SQL插入聲明性能的急劇下降。假如數(shù)據(jù)區(qū)塊剩余空間不是很多,那么在SQL插入操作的過程中就會產(chǎn)生過量的I/O,這是因為被重新使用的Oracle數(shù)據(jù)區(qū)塊會被迅速地填滿。從極端的角度來看,沒有正確地設(shè)置PCTUSED會導(dǎo)致數(shù)據(jù)區(qū)塊的剩余空間要比表格數(shù)據(jù)行的平均長度小。在這樣的情況下,Oracle會五次嘗試從freelist鏈取回區(qū)塊。在五次嘗試以后,Oracle會提升表格的水位,并為插入操作騰出五個新的數(shù)據(jù)塊。
    有了Oracle9i的ASSM,PCTUSED就不再控制表格數(shù)據(jù)塊的重新鏈接闕值了,但是你必須依靠Oracle的判定來確定區(qū)塊在什么時候會有足夠的剩余空間放置到freelist里。     盡管有了本地治理的tablespace和ASSM之后Oracle9i會忽略PCTUSED、FREELISTS和FREELIST GROUPS等參數(shù),但是當(dāng)它們用于表格定義的時候,Oracle還是不會給出錯誤信息:
  
  SQL> create table
  2 test_table
  3 (c1 number)
  4 tablespace
  5 asm_test
  6 pctfree 20 pctused 30
  7 storage
  8 ( freelists 23 next 5m ) ;
  Table created.
  
   
    假如你不記得帶有ASSM的本地治理tablespace會略掉任何為PCTUSED、NEXT和FREELISTS所指定的值的話,這將是一個十分嚴(yán)重的問題。.     使用ASSM的一個巨大優(yōu)勢是,位圖freelist肯定能夠減輕緩沖區(qū)忙等待(buffer busy wait)的負(fù)擔(dān),這個問題在Oracle9i以前的版本里曾是一個嚴(yán)重的問題。現(xiàn)在讓我們來仔細(xì)看看這個特性。     在沒有多個freelist的時候,每個Oracle表格和索引在表格的頭部都曾有一個數(shù)據(jù)塊,用來治理對象所使用的剩余區(qū)塊,并為任何SQL插入聲明所創(chuàng)建的新數(shù)據(jù)行提供數(shù)據(jù)塊。當(dāng)數(shù)據(jù)緩沖內(nèi)的數(shù)據(jù)塊由于被另一個DML事務(wù)處理鎖定而無法使用的時候,緩沖區(qū)忙等待就會發(fā)生。當(dāng)你需要將多個任務(wù)插入到同一個表格里的時候,這些任務(wù)就被強(qiáng)制等待,而同時Oracle會在同時分派剩余的區(qū)塊,一次一個。     有了ASSM之后,Oracle宣稱顯著地提高了DML并發(fā)操作的性能,因為(同一個)位圖的不同部分可以被同時使用,這樣就消除了尋找剩余空間的串行化。根據(jù)Oracle的測試結(jié)果,使用位圖freelist會消除所有分段頭部(對資源)的爭奪,還能獲得超快的并發(fā)插入操作(圖A)。 Oracle數(shù)據(jù)庫中利用ASSM改善分段存儲圖A Oracle公司對使用位圖freelist進(jìn)行SQL插入操作的測試結(jié)果
    ASSM的局限性     盡管ASSM顯示出了令人激動的特性并能夠簡化Oracle DBA的工作,但是Oracle9i的位圖分段治理還是有一些局限性的: 一旦DBA被分配之后,它就無法控制tablespace內(nèi)部的獨立表格和索引的存儲行為。 大型對象不能夠使用ASSM,而且必須為包含有LOB數(shù)據(jù)類型的表格創(chuàng)建分離的tablespace。 你不能夠使用ASSM創(chuàng)建臨時的tablespace。這是由排序時臨時分段的短暫特性所決定的。 只有本地治理的tablespace才能夠使用位圖分段治理。 使用超高容量的DML(例如INSERT、UPDATE和DELETE等)的時候可能會出現(xiàn)性能上的問題。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 渭南市| 阳高县| 微博| 福清市| 安徽省| 甘孜县| 溧水县| 达拉特旗| 呈贡县| 红原县| 静海县| 河津市| 贺州市| 庆城县| 旌德县| 确山县| 郑州市| 连城县| 禹城市| 五家渠市| 浦江县| 延川县| 洛宁县| 泰兴市| 砀山县| 大田县| 临澧县| 嘉定区| 江川县| 临清市| 绥化市| 醴陵市| 军事| 民勤县| 徐水县| 阜新市| 理塘县| 永泰县| 同心县| 察隅县| 佛坪县|