這篇文章主要介紹Oracle event之db file read怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、曾都ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的曾都網(wǎng)站制作公司
db file
sequential
read
(single block read into one SGA buffer)
db
file
scattered
read
(multiblock read into many discontinuous SGA buffers)
direct
read
(single or multiblock read into the PGA, bypassing the SGA)
最為常見的是執(zhí)行計劃中包含了INDEX FULL SCAN/UNIQUE SCAN,此時出現(xiàn)”db file sequential read”等待是預料之中的,一般不需要我們?nèi)ヌ貏e關(guān)注
2.當執(zhí)行計劃包含了INDEX RANGE SCAN-(“TABLE ACCESS BY INDEX ROWID”/”DELETE”/”UPDATE”), 服務(wù)進程將按照”訪問索引->找到rowid->訪問rowid指定的表數(shù)據(jù)塊并執(zhí)行必要的操作”順序訪問index和table,每次物理 讀取都會進入”db file sequential read”等待,且每次讀取的都是一個數(shù)據(jù)塊;這種情況下clustering_factor將發(fā)揮其作用,需要我們特別去關(guān)注,本例中提及的解決方法對 這種情景也有效
3.Extent boundary,假設(shè)一個Extent區(qū)間中有33個數(shù)據(jù)塊,而一次”db file scattered read”多塊讀所讀取的塊數(shù)為8,那么在讀取這個區(qū)間時經(jīng)過4次多塊讀取后,還剩下一個數(shù)據(jù)塊,但是請記住多塊讀scattered read是不能跨越一個區(qū)間的(span an extent),此時就會單塊讀取并出現(xiàn)”db file sequential read”。這是一種正?,F(xiàn)象,一般不需要額外關(guān)注
4.假設(shè)某個區(qū)間內(nèi)有8個數(shù)據(jù)塊,它們可以是塊a,b,c,d,e,f,g,h,恰好當前系統(tǒng)中除了d塊外的其他數(shù)據(jù)塊都已經(jīng)被緩存在buffer cache中了,而這時候恰好要訪問這個區(qū)間中的數(shù)據(jù),那么此時就會單塊讀取d這個數(shù)據(jù)塊,并出現(xiàn)”db file sequential read”等待。注意這種情況不僅于表,也可能發(fā)生在索引上。這是一種正?,F(xiàn)象,一般不需要額外關(guān)注
5.chained/migrated rows即鏈式或遷移行,這里我們不介紹鏈式行的形成原因,chained/migrated rows會造成服務(wù)進程在fetch一行記錄時需要額外地單塊讀取,從而出現(xiàn)”db file sequential read”。這種現(xiàn)象需要我們特別去關(guān)注,因為大量的鏈式/遷移行將導致如FULL SCAN等操作極度惡化(以往的經(jīng)驗是一張本來全表掃描只需要30分鐘的表,在出現(xiàn)大量鏈式行后,全表掃描需要數(shù)個小時),同時也會對其他操作造成不那么 明顯的性能影響??梢酝ㄟ^監(jiān)控v$sysstat視圖中的”table fetch continued row”操作統(tǒng)計來了解系統(tǒng)中鏈式/遷移行訪問的情況,還可以通過DBA_TBALES視圖中的CHAIN_CNT來了解表上的鏈式/遷移行情況,當然這 要求定期收集表上的統(tǒng)計信息;如果沒有定期收集的習慣,那么可以配合@?/rdbms/admin/utlchain腳本和analyze table list chained rows 命令來獲取必要的鏈式行信息
6.創(chuàng)建Index entry,顯然當對表上執(zhí)行INSERT操作插入數(shù)據(jù)時,雖然在執(zhí)行計劃中你看不到過多的細節(jié),但實際上我們需要利用索引來快速驗證表上的某些約束是否 合理,還需要在索引的葉子塊中插入相關(guān)的記錄,此時也可能出現(xiàn)”db file sequential read”等待事件,當然這還和具體的插入的方式有關(guān)系。這是一種正?,F(xiàn)象,一般不需要額外關(guān)注
7.針對表上的UPDATE/DELETE,不同于之前提到的”INDEX RANGE SCAN-UPDATE/DELETE”,如果我們使用rowid去更新或刪除數(shù)據(jù)時,服務(wù)進程會先訪問rowid指向的表塊(注意是先訪問table block)上的行數(shù)據(jù),之后會根據(jù)該行上的具體數(shù)據(jù)去訪問索引葉子塊(注意Oracle并不知道這些leaf block在哪里,所以這里同樣要如range-scan/unique-scan那樣去訪問index branch block),這些訪問都將會是單塊讀取,并會出現(xiàn)’db file sequential read’,完成必要的讀取后才會執(zhí)行更新或刪除的實際EXEC操作
db file sequential read 當進程需要的信息不在SGA,要等待從磁盤讀入SGA中,此時進程等待此事件。一般是由sql或者遞歸sql中發(fā)出,從索引,回滾段,表(rowid回表),控制文件,數(shù)據(jù)文件頭處讀取信息觸發(fā).要減少這個等待事件,要么減少它的次數(shù),要么減少平均等待時間。通過調(diào)優(yōu)SQL來減少邏輯讀,留意效率低的大范圍索引掃描回表(可能全表掃更好),可以減低次數(shù)。用更高響應時間的存儲,分散熱點文件,可以減輕平均等待時間。在新的存儲子系統(tǒng),平均單塊讀等待時間不應超過10ms(千分之一秒)。通過p1與p2參數(shù)與dba_extents視圖,我們定位到等待訪問的段,然后來分散熱點。
官檔等待事件:performance tuning guide --- wait events statistics
以上是“Oracle event之db file read怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!