【等待事件】db file scattered read

恩強Boy發表於2021-01-12

等待事件db file scattered read

等待事件說明

這個等待事件會在一個多塊IO 完成時發生。它通常在“ FULL TABLE SCAN ”(全表掃描)和“ INDEX FAST FULL SCAN ”(索引快速全掃描)期間發生。 Oracle 每次讀取 DB_FILE_MULTIBLOCK_READ_COUNT 連續的資料塊,並將它們分散到 buffer cache 中的 buffer 中。如何做到這一點取決於你所執行的平臺和 Oracle 版本。根據讀取的裝置型別和請求的塊數量,它也有可能有所不同。

這個IO 是一個很正常的活動,而我們要注意的是不必要或緩慢的 IO 活動。如果等待多塊讀的時間很長,那麼需要確定 Oracle 正在對哪些段 / 物件執行讀操作。需要參考 AWR 中“ Tablespace IO ”和“ File IO ”,以及 ADDM ASH 輸出。這些內容中應該顯示哪些表空間 / 檔案正在處理最多的 IO 請求,並顯示了 IO 子系統的速度。表空間 / 檔案涉及“ db file scattered read ”等待將會顯示 "Av Blks/Rd">1 (值大於 1 表示發生了多塊讀)。還需要參閱 AWR 中“ SQL ordered by Reads ”,瞭解任何 SQL 導致高 IO 的線索。

如果啟用了統計資訊,那麼v$sql_plan 也可以提供關於使用 FULL SCAN SQL 語句的線索。有的時候,檢視哪些會話正在執行掃描並跟蹤它們,以確定掃描是否在預期範圍內是很重要的。以下語句可以檢視哪些會話正在引起等待:

SQL> SELECT sid, total_waits, time_waited

FROM v$session_event

WHERE event='db file scattered read'

and total_waits>0

ORDER BY 3,2;

解決方法

理想情況下,當有一種更快、更有選擇性的方法獲取資料時,我們不希望應用程式的SQL 執行 FULL SCAN 。在這種情況下,我們應該使用查詢調優來最佳化 SQL 。一些具體的 "db file scattered read" 調優方法如下:

- SQL 調優通常最有用,也是 IO 效能最佳化的核心

- 需要考慮使用分割槽來減少需要掃描的資料量

- 確定受影響的物件是否分佈比較分散,如果是,可以對該物件進行縮小

- 考慮使用高階壓縮來減少需要訪問的塊的數量

- 由於分散讀是將資料塊讀取到不同緩衝區中,小心使用多個緩衝池和快取選項可能會有所幫助

 

 

---- end ----


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2749364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章