日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Oracle數(shù)據(jù)庫(kù)中索引樹(shù)的結(jié)構(gòu)與塊尺寸

導(dǎo)讀:關(guān)于Oracle數(shù)據(jù)庫(kù)索引樹(shù)的結(jié)構(gòu)以及它們對(duì)Oracle性能調(diào)優(yōu)是否重要存在大量的、激烈的爭(zhēng)論,而且已經(jīng)有很多文章試圖來(lái)描述這些重要的Oracle性能工具的內(nèi)部工作機(jī)制。

創(chuàng)新互聯(lián)建站是一家專(zhuān)注于成都網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),達(dá)坂城網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:達(dá)坂城等地區(qū)。達(dá)坂城做網(wǎng)站價(jià)格咨詢(xún):13518219792

正如我們知道的,Oracle提供了大量索引結(jié)構(gòu),每種索引結(jié)構(gòu)都有其好處和不足:

  1.    B樹(shù)索引。從最早的Oracle發(fā)行版本開(kāi)始,Oracle就一直使用的標(biāo)準(zhǔn)樹(shù)索引就是B樹(shù)索引。
  2.   位圖索引。當(dāng)某個(gè)索引列含有很少數(shù)量的不同的值(即低基數(shù))時(shí),使用位圖索引。這對(duì)于那些只讀數(shù)據(jù)庫(kù)而言速度超快,但對(duì)需要經(jīng)常性更新的系統(tǒng)不適合。
  3.    位圖連接索引。這是針對(duì)來(lái)自其他表的數(shù)據(jù)列出現(xiàn)在某個(gè)連接表的多列索引時(shí)使用的索引。下面是在from子句和where子句中使用類(lèi)似SQL的創(chuàng)建索引的惟一語(yǔ)法。

以下是代碼片段:

 
 
 
  1.  create bitmap index   
  2.   part_suppliers_state   
  3.   on   
  4.   inventory( parts.part_type, supplier.state )   
  5.   from   
  6.   inventory i,   
  7.   parts p,   
  8.   supplier s   
  9.   where   
  10.   i.part_id=p.part_id   
  11.   and   
  12.   i.supplier_id=p.supplier_id;   

  盡管有關(guān)索引重建的爭(zhēng)論仍在激烈進(jìn)行著,但還是存在每個(gè)人都認(rèn)可的索引管理的某些領(lǐng)域。在內(nèi)部機(jī)制上,一個(gè)Oracle B-樹(shù)索引的結(jié)構(gòu)和一個(gè)UNIX I-結(jié)點(diǎn)的結(jié)構(gòu)非常相似。索引中的每個(gè)數(shù)據(jù)塊都是索引樹(shù)中的一個(gè)結(jié)點(diǎn),位于***部的結(jié)點(diǎn)(葉數(shù)據(jù)塊)包含一對(duì)符號(hào)鍵和行ID值。

Oracle b-樹(shù)索引

為了正確管理這些數(shù)據(jù)塊,Oracle控制著每個(gè)數(shù)據(jù)塊中指針的分配。隨著一棵Oracle樹(shù)的增長(zhǎng)(通過(guò)往表里插入新行),Oracle會(huì)填充這個(gè)數(shù)據(jù)塊,當(dāng)這個(gè)數(shù)據(jù)塊滿(mǎn)時(shí)Oracle會(huì)分裂它,創(chuàng)建新的索引結(jié)點(diǎn)(數(shù)據(jù)塊)來(lái)管理索引內(nèi)的符號(hào)鍵。

因此,一個(gè)Oracle索引塊可能包含以下兩種類(lèi)型的指針:

  1.    指向其他索引結(jié)點(diǎn)(數(shù)據(jù)塊)的指針
  2.    指向數(shù)據(jù)庫(kù)表中特定行的行ID指針

Oracle管理著索引塊內(nèi)指針的分配,這就是為什么我們不能為索引指定一個(gè)PCTUSED值(自由列表重鏈接門(mén)檻)的原因。當(dāng)我們檢查一個(gè)索引塊的結(jié)構(gòu)時(shí),我們發(fā)現(xiàn)每個(gè)索引結(jié)點(diǎn)內(nèi)部條目的數(shù)量是下面兩個(gè)值的一個(gè)函數(shù):

1. 符號(hào)鍵的長(zhǎng)度

2. 索引表空間的塊尺寸

由于塊尺寸影響每個(gè)索引結(jié)點(diǎn)內(nèi)部的符號(hào)鍵的數(shù)量,可以推理出:塊尺寸對(duì)一棵索引樹(shù)的結(jié)構(gòu)也會(huì)有影響。在其他條件相同的情況下,采用32K的大數(shù)據(jù)塊能容納更多的符號(hào)鍵,從而能夠比在2K表空間中創(chuàng)建的相同的索引更加平整。采用大的數(shù)據(jù)塊也將減少索引訪問(wèn)期間一致獲取的數(shù)量,從而提高分散讀訪問(wèn)的性能。

索引中的每個(gè)數(shù)據(jù)塊包含索引樹(shù)中的“結(jié)點(diǎn)”,位于***部的結(jié)點(diǎn)(葉數(shù)據(jù)塊)包含一對(duì)符號(hào)鍵和行ID值。隨著一棵Oracle樹(shù)的增長(zhǎng)(通過(guò)往表里插入新行),Oracle會(huì)填充這個(gè)數(shù)據(jù)塊,當(dāng)這個(gè)數(shù)據(jù)塊滿(mǎn)時(shí)Oracle會(huì)分裂它,創(chuàng)建新的索引結(jié)點(diǎn)(數(shù)據(jù)塊)來(lái)管理索引內(nèi)的符號(hào)鍵。因此,一個(gè)Oracle索引塊可能包含指向其他索引結(jié)點(diǎn)或行ID/符號(hào)鍵對(duì)的指針。

索引行為和Oracle塊尺寸

由于塊尺寸影響每個(gè)索引結(jié)點(diǎn)內(nèi)部的符號(hào)鍵的數(shù)量,可以推理出:塊尺寸對(duì)一棵索引樹(shù)的結(jié)構(gòu)也會(huì)有影響。在其他條件相同的情況下,采用32K的大數(shù)據(jù)塊能容納更多的符號(hào)鍵,從而能夠比在2K表空間中創(chuàng)建的相同的索引更加平整。

今天,大多數(shù)Oracle性能調(diào)優(yōu)專(zhuān)家都利用Oracle提供的多種塊尺寸的特色,因?yàn)樗峁┝司彌_區(qū)隔離和以最合適塊尺寸來(lái)存放對(duì)象從而減少緩沖區(qū)浪費(fèi)的能力。一些Oracle基準(zhǔn)測(cè)試的世界記錄都使用很大的數(shù)據(jù)緩沖區(qū)和多種塊尺寸。

根據(jù)《Oracle數(shù)據(jù)庫(kù)管理員認(rèn)證:“Oracle 認(rèn)證數(shù)據(jù)庫(kù)管理專(zhuān)家”教師指南》一書(shū)的作者Christopher Foot的一篇文章,更大的塊尺寸在某些情況下非常有幫助:

“更大的塊尺寸意味著在B-樹(shù)索引的分支結(jié)點(diǎn)中有更多的空間來(lái)存儲(chǔ)符號(hào)鍵,從而可以降低樹(shù)的高度和提高索引查詢(xún)的性能?!?/p>

在任何情況下,似乎有證據(jù)表明塊尺寸影響樹(shù)的結(jié)構(gòu),這為數(shù)據(jù)塊影響樹(shù)的結(jié)構(gòu)提供了有力支持。

你可以使用大數(shù)據(jù)塊(16-32)緩沖區(qū)來(lái)存儲(chǔ)來(lái)自作為重復(fù)性大規(guī)模掃描對(duì)象的索引或表中的數(shù)據(jù)。這真的會(huì)提高性能么?一個(gè)小的但透漏內(nèi)情的測(cè)試能回答這個(gè)問(wèn)題。

#p#

在這個(gè)測(cè)試中,將對(duì)某個(gè)使用8K數(shù)據(jù)塊尺寸的Oracle 9i數(shù)據(jù)庫(kù)執(zhí)行以下查詢(xún),這個(gè)數(shù)據(jù)庫(kù)同時(shí)也使用16K緩沖區(qū)和16K大小的表空間。

以下是代碼片段:
 

 
 
 
  1.  select   
  2.   count(*)   
  3.   from   
  4.   eradmin.admission   
  5.   where   
  6.   patient_id between 1 and 40000; 

以下是代碼片段:

 
 
 
  1.  Execution Plan   
  2.   SELECT STATEMENT Optimizer=CHOOSE   
  3.   (Cost=41 Card=1 Bytes=4)   
  4.   1 0 SORT (AGGREGATE)   
  5.   2 1 INDEX (FAST FULL SCAN) OF 'ADMISSION_PATIENT_ID'   
  6.   (NON-UNIQUE) (Cost=41 Card=120002 Bytes=480008)   

以下是代碼片段:
 

 
 
 
  1.  Statistics   
  2.   0 recursive calls   
  3.   0 db block gets   
  4.   421 consistent gets   
  5.   0 physical reads   
  6.   0 redo size   
  7.   371 bytes sent via SQL*Net to client   
  8.   430 bytes received via SQL*Net from client   
  9.   2 SQL*Net roundtrips to/from client   
  10.   0 sorts (memory)   
  11.   0 sorts (disk)   
  12.   1 rows processed   

  為了測(cè)試新的16K緩沖區(qū)和16K表空間的效果,將使用16K的表空間來(lái)重建這個(gè)查詢(xún)所用的索引,16K的表空間和原來(lái)的8K的表空間相比,除了更大的塊尺寸其他特性一模一樣。

以下是代碼片段:

 
 
 
  1.  alter index   
  2.   eradmin.admission_patient_id   
  3.   rebuild nologging noreverse tablespace indx_16k;   

  一旦在16K表空間中建立好這個(gè)索引,就再次執(zhí)行這個(gè)查詢(xún)(同樣也是執(zhí)行兩次),會(huì)產(chǎn)生以下的運(yùn)行時(shí)統(tǒng)計(jì)信息:

以下是代碼片段:

 
 
 
  1.  Statistics   
  2.   0 recursive calls   
  3.   0 db block gets   
  4.   211 consistent gets   
  5.   0 physical reads   
  6.   0 redo size   
  7.   371 bytes sent via SQL*Net to client   
  8.   430 bytes received via SQL*Net from client   
  9.   2 SQL*Net roundtrips to/from client   
  10.   0 sorts (memory)   
  11.   0 sorts (disk)   
  12.   1 rows processed   

  正如你所看到的,邏輯讀操作的次數(shù)被減少了一半,僅僅是由于使用了新的16K表空間和16K數(shù)據(jù)緩沖區(qū)。很顯然,正確使用新的數(shù)據(jù)緩沖區(qū)和Oracle9i及其以上版本的多種塊尺寸表空間的特色,很值得在你的數(shù)據(jù)庫(kù)中被試驗(yàn)和研究。

定期進(jìn)行索引重建?

爭(zhēng)論的另外一個(gè)領(lǐng)域是:是否存在一些確定的規(guī)則可以用來(lái)確定何時(shí)能夠從索引重建中獲取性能提高。許多使用Oracle的企業(yè)都定期進(jìn)行索引重建,并聲稱(chēng)在他們和重建他們的Oracle B-樹(shù)索引后獲得了相當(dāng)大的速度提升。

在“Oracle世界2003”上,展示了Sushil Kumar所著的一篇題為“Oracle數(shù)據(jù)庫(kù)10g:自我管理的數(shù)據(jù)庫(kù)”的文章,Kumar聲明說(shuō)Oracle10g的“自動(dòng)維護(hù)任務(wù)”(AMT)特色將自動(dòng)檢測(cè)并重建潛在的***化的索引。

“自動(dòng)工作負(fù)載信息庫(kù)(AWR)給oracle10g提供了關(guān)于數(shù)據(jù)庫(kù)各種使用情況的詳細(xì)信息。通過(guò)分析存儲(chǔ)在自動(dòng)工作負(fù)載信息庫(kù)(AWR)中的信息,10g數(shù)據(jù)庫(kù)可以決定是否需要執(zhí)行數(shù)據(jù)庫(kù)性能維護(hù)任務(wù),比如優(yōu)化器統(tǒng)計(jì)數(shù)字的刷新、重建索引等等。 以“自動(dòng)維護(hù)任務(wù)”AMT為基礎(chǔ),oracle數(shù)據(jù)庫(kù)可以自動(dòng)執(zhí)行這些操作?!?/p>

盡管如此,仍有不少反對(duì)定期重建索引的論點(diǎn)。一些oracle內(nèi)部的專(zhuān)家堅(jiān)持認(rèn)為oracle索引在空間重用和訪問(wèn)速度上是非常高效的,b-樹(shù)索引在極少情況下才需要被重建。他們堅(jiān)持認(rèn)為邏輯輸入輸出的減少應(yīng)該是可測(cè)量的,并且如果重建索引是有好處的,某些人應(yīng)該已經(jīng)提出了可以證明的規(guī)則。

結(jié)論

多種數(shù)據(jù)塊尺寸的特色能夠提高Oracle索引的性能,而且在某些情況下重建索引可以提高查詢(xún)速度,這是顯而易見(jiàn)的。人們期望新的Oracle10g“自動(dòng)維護(hù)任務(wù)”AMT允許自動(dòng)檢測(cè)并重建潛在的***化索引結(jié)構(gòu)。希望上文中涉及到的內(nèi)容對(duì)大家能夠有所幫助。

【編輯推薦】

  1. Oracle數(shù)據(jù)庫(kù)關(guān)閉方法總結(jié)
  2. Oracle數(shù)據(jù)庫(kù)效率技巧:避免錯(cuò)誤的索引
  3. ORACLE實(shí)例和ORACLE數(shù)據(jù)庫(kù)詳解
  4. Oracle數(shù)據(jù)庫(kù)基本常識(shí)

文章題目:Oracle數(shù)據(jù)庫(kù)中索引樹(shù)的結(jié)構(gòu)與塊尺寸
文章URL:http://www.dlmjj.cn/article/dhsceop.html