db file sequential read事件的發生
”db file sequential read”單塊讀等待是一種最為常見的物理IO等待事件,這裡的sequential指的是將資料塊讀入到相連的記憶體空間中(contiguous memory space),而不是指所讀取的資料塊是連續的。該wait event可能在以下情景中發生:
- 最為常見的是執行計劃中包含了INDEX FULL SCAN/UNIQUE SCAN,此時出現”db file sequential read”等待是預料之中的,一般不需要我們去特別關注
- 當執行計劃包含了INDEX RANGE SCAN-(“TABLE ACCESS BY INDEX ROWID”/”DELETE”/”UPDATE”), 服務程式將按照”訪問索引->找到rowid->訪問rowid指定的表資料塊並執行必要的操作”順序訪問index和table,每次物理 讀取都會進入”db file sequential read”等待,且每次讀取的都是一個資料塊;這種情況下clustering_factor將發揮其作用,需要我們特別去關注,本例中提及的解決方法對 這種情景也有效
- Extent boundary,假設一個Extent區間中有33個資料塊,而一次”db file scattered read”多塊讀所讀取的塊數為8,那麼在讀取這個區間時經過4次多塊讀取後,還剩下一個資料塊,但是請記住多塊讀scattered read是不能跨越一個區間的(span an extent),此時就會單塊讀取並出現”db file sequential read”。這是一種正常現象,一般不需要額外關注
- 假設某個區間內有8個資料塊,它們可以是塊a,b,c,d,e,f,g,h,恰好當前系統中除了d塊外的其他資料塊都已經被快取在buffer cache中了,而這時候恰好要訪問這個區間中的資料,那麼此時就會單塊讀取d這個資料塊,並出現”db file sequential read”等待。注意這種情況不僅於表,也可能發生在索引上。這是一種正常現象,一般不需要額外關注
- 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 命令來獲取必要的鏈式行資訊
- 建立Index entry,顯然當對錶上執行INSERT操作插入資料時,雖然在執行計劃中你看不到過多的細節,但實際上我們需要利用索引來快速驗證表上的某些約束是否 合理,還需要在索引的葉子塊中插入相關的記錄,此時也可能出現”db file sequential read”等待事件,當然這還和具體的插入的方式有關係。這是一種正常現象,一般不需要額外關注
- 針對表上的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操作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-1395332/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- db file sequential read等待事件事件
- 【等待事件】db file sequential read事件
- 等待事件db file sequential read、db file scattered read和direct read的區別事件
- 【TUNE_ORACLE】等待事件之IO等待“db file sequential read”Oracle事件
- db file scattered read等待事件事件
- 【等待事件】db file scattered read事件
- I/O上的等待事件 —— control file sequential read/control file parallel write事件Parallel
- 0316理解db file parallel read等待事件Parallel事件
- 0322理解db file parallel read等待事件2Parallel事件
- [20181130]control file sequential read.txt
- [20181129]大量的control file sequential read.txt
- [20210315]理解db file parallel read等待事件3.txtParallel事件
- [20210315]理解db file parallel read等待事件4.txtParallel事件
- Oracle:db file scattered readOracle
- 【TUNE_ORACLE】等待事件之IO等待“db file scattered read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- read content in a text file in pythonPython
- direct path read/read temp等待事件事件
- db block gets 與 consistent read getsBloC
- C# read excel file via ExcelDataReaderC#ExcelLDA
- The Db2 Recovery History FileDB2
- read by other session等待事件Session事件
- idea怎麼修改檔案的file is read-onlyIdea
- read by other session 等待事件分析Session事件
- iis 0x80070032 Cannot read configuration file because it exceeds the maximum file size
- cell single block physical read等待事件BloC事件
- log file sync等待事件事件
- 【等待事件】log file sync事件
- 每日一個 Golang Packages 06/07 os File Read wtiteGolangPackage
- mysql什麼時候會發生file sortMySql
- Unable to read TLD "META-INF/c.tld" from JAR fileJAR
- remount of /system failed: Read-only file system原因及解決REMAI
- 【問題處理】ORA-00376 file xx cannot be read at this time
- [重慶思莊每日技術分享]-dg環境測試 db_create_file_dest和db_file_name_convert引數
- 事件發生時,你在想什麼?事件
- Oracle RAC 重置db_recovery_file_dest_size引數Oracle
- [20200416]ORA-01187 cannot read from file because it failed verification tests.AI
- 【WAIT】 log file sync等待事件說明AI事件
- log file sync等待事件處理思路事件