您好,登錄后才能下訂單哦!
這篇文章主要介紹Oracle event之db file read怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
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)
最為常見的是執行計劃中包含了INDEX FULL SCAN/UNIQUE SCAN,此時出現”db file sequential read”等待是預料之中的,一般不需要我們去特別關注
2.當執行計劃包含了INDEX RANGE SCAN-(“TABLE ACCESS BY INDEX ROWID”/”DELETE”/”UPDATE”), 服務進程將按照”訪問索引->找到rowid->訪問rowid指定的表數據塊并執行必要的操作”順序訪問index和table,每次物理 讀取都會進入”db file sequential read”等待,且每次讀取的都是一個數據塊;這種情況下clustering_factor將發揮其作用,需要我們特別去關注,本例中提及的解決方法對 這種情景也有效
3.Extent boundary,假設一個Extent區間中有33個數據塊,而一次”db file scattered read”多塊讀所讀取的塊數為8,那么在讀取這個區間時經過4次多塊讀取后,還剩下一個數據塊,但是請記住多塊讀scattered read是不能跨越一個區間的(span an extent),此時就會單塊讀取并出現”db file sequential read”。這是一種正常現象,一般不需要額外關注
4.假設某個區間內有8個數據塊,它們可以是塊a,b,c,d,e,f,g,h,恰好當前系統中除了d塊外的其他數據塊都已經被緩存在buffer cache中了,而這時候恰好要訪問這個區間中的數據,那么此時就會單塊讀取d這個數據塊,并出現”db file sequential read”等待。注意這種情況不僅于表,也可能發生在索引上。這是一種正常現象,一般不需要額外關注
5.chained/migrated rows即鏈式或遷移行,這里我們不介紹鏈式行的形成原因,chained/migrated rows會造成服務進程在fetch一行記錄時需要額外地單塊讀取,從而出現”db file sequential read”。這種現象需要我們特別去關注,因為大量的鏈式/遷移行將導致如FULL SCAN等操作極度惡化(以往的經驗是一張本來全表掃描只需要30分鐘的表,在出現大量鏈式行后,全表掃描需要數個小時),同時也會對其他操作造成不那么 明顯的性能影響。可以通過監控v$sysstat視圖中的”table fetch continued row”操作統計來了解系統中鏈式/遷移行訪問的情況,還可以通過DBA_TBALES視圖中的CHAIN_CNT來了解表上的鏈式/遷移行情況,當然這 要求定期收集表上的統計信息;如果沒有定期收集的習慣,那么可以配合@?/rdbms/admin/utlchain腳本和analyze table list chained rows 命令來獲取必要的鏈式行信息
6.創建Index entry,顯然當對表上執行INSERT操作插入數據時,雖然在執行計劃中你看不到過多的細節,但實際上我們需要利用索引來快速驗證表上的某些約束是否 合理,還需要在索引的葉子塊中插入相關的記錄,此時也可能出現”db file sequential read”等待事件,當然這還和具體的插入的方式有關系。這是一種正常現象,一般不需要額外關注
7.針對表上的UPDATE/DELETE,不同于之前提到的”INDEX RANGE SCAN-UPDATE/DELETE”,如果我們使用rowid去更新或刪除數據時,服務進程會先訪問rowid指向的表塊(注意是先訪問table block)上的行數據,之后會根據該行上的具體數據去訪問索引葉子塊(注意Oracle并不知道這些leaf block在哪里,所以這里同樣要如range-scan/unique-scan那樣去訪問index branch block),這些訪問都將會是單塊讀取,并會出現’db file sequential read’,完成必要的讀取后才會執行更新或刪除的實際EXEC操作
db file sequential read 當進程需要的信息不在SGA,要等待從磁盤讀入SGA中,此時進程等待此事件。一般是由sql或者遞歸sql中發出,從索引,回滾段,表(rowid回表),控制文件,數據文件頭處讀取信息觸發.要減少這個等待事件,要么減少它的次數,要么減少平均等待時間。通過調優SQL來減少邏輯讀,留意效率低的大范圍索引掃描回表(可能全表掃更好),可以減低次數。用更高響應時間的存儲,分散熱點文件,可以減輕平均等待時間。在新的存儲子系統,平均單塊讀等待時間不應超過10ms(千分之一秒)。通過p1與p2參數與dba_extents視圖,我們定位到等待訪問的段,然后來分散熱點。
官檔等待事件:performance tuning guide --- wait events statistics
以上是“Oracle event之db file read怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。