與IO相關的等待事件troubleshooting-系列4
與資料檔案IO相關的等待事件:
接下來的等待事件是與資料檔案的IO操作時產生的。
'db file sequential read'
這是一種最常見的IO相關的等待。大多數情況下,他指的是單塊讀,例如索引資料塊或通過索引訪問的表資料塊,也能在讀取資料檔案頭塊時看到這種等待事件。在更早的版本中,這種等待事件也會產生於從磁碟的排序段通過多快讀的方式讀入Buffer Cache的連續("sequential")緩衝。
如果這種等待事件佔據了大部分的等待時間,可以嘗試以下的若干方法:
1. 找到物理讀Top前幾位的SQL語句(從Statspack或AWR報告的“SQL ordered by Reads”節或V$SQL檢視),進行調優以減少IO請求:
(1) 如果使用了索引範圍掃描(Index Range scans),且索引選擇性較差,那麼就需要訪問比正常情況更多的塊。通過強制使用選擇性更好的索引,訪問同一張表可以讀取更少的索引塊(花費更少的物理IO)。
(2) 如果碎銀出現碎片化,可能仍舊會訪問更多的塊,因為單塊包含的索引資料更少。
(3) 如果索引的Clustering Factor非常大,需要訪問更多的表資料塊,才能在每個索引塊上得到行資料。通過重建表,根據特定的索引列對行進行排序,能夠降低Clustering Factor,以及每個索引塊需要訪問的表資料塊數量。例如,如果表包含A,B,C和D列,索引是B,D,那麼重建表為:CREATE TABLE new AS SELECT * FROM old ORDER BY b,d;
(3) 使用分割槽以減少每個使用分割槽剪裁的SQL語句需要訪問的索引和表資料塊的數量。
2. 如果沒有特殊的SQL語句使用了較差的執行計劃,但仍舊產生了比正常更多的物理IO,以下情況可能發生:
(1) 特殊的資料檔案IO可能處理非常緩慢,原因可能是磁碟的過度訪問。這種情況下,檢視Statspack的"File I/O Statistics"節(或V$FILESTAT)可以幫我們找到這樣的熱磁碟,通過手工移動這些資料檔案到其它的儲存以分散IO,或者充分利用條帶化,RAID和其它的技術,自動執行IO負載均衡。
(2) 從Oracle 9.2開始,通過使用來自V$SEGMENT_STATISTICS檢視的段統計資訊,我們也能找到哪些段(表或索引)存在最多的物理讀。然後我們能詳細研究下這些段的細節,例如索引是否需要重建或者是否需要使用分割槽來降低IO。Statspack也可以在level 7級別上產生“段統計資訊”的報告。
3. 如果沒有SQL使用較差的執行計劃,IO也平均地分不到所有磁碟,但響應時間仍舊較長,那麼一個大的Buffer Cache緩衝可能有幫助:
在Oracle 8i,用逐漸增長的DB_BLOCK_BUFFERS做個實驗。
通過從Statspack中衡量Buffer Cache Hit Ratio,直到沒有任何提高為止。
(1) 在Oracle 9i之前的版本,可以使用Buffer Cache Advisory工具(從Statspack報告中可以得到)來調整Buffer Cache的容量。
(2) Oracle 10g之前的版本,ASMM(Automatic Shared Memory Management)能夠用來讓資料庫根據當前負載,自動判斷Buffer Cache的最佳容量。(可參考:Document 257643.1 Oracle Database 10g Automated SGA Memory Tuning)
(3) 對於熱段,多Buffer Pools的使用可以幫助解決問題,可以將這樣的“熱”索引和表放到KEEP緩衝池。(可參考:Document 76374.1 Multiple Buffer Pools)
4. 最後,還可以考慮降低經常訪問的段中包含的資料量(例如將舊的、不需要的資料移出資料庫),或將這些段移動到更快的磁碟中,以降低其IO所需要的響應時間。
(未完待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-773818/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 與IO相關的等待事件troubleshooting-系列9事件
- 與IO相關的等待事件troubleshooting-系列8事件
- 與IO相關的等待事件troubleshooting-系列7事件
- 與IO相關的等待事件troubleshooting-系列6事件
- 與IO相關的等待事件troubleshooting-系列5事件
- 與IO相關的等待事件troubleshooting-系列3事件
- 與IO相關的等待事件troubleshooting-系列2事件
- 與IO相關的等待事件troubleshooting-系列1事件
- 【效能調整】等待事件(七) io相關等待查詢指令碼事件指令碼
- zt_eygle大師_如何與io相關的wait event等待事件AI事件
- buffer cache與相關的latch等待事件事件
- latch 相關等待事件事件
- 等待事件相關(zt)事件
- 【等待事件之二】log 相關的等待事件
- gc 等相關等待事件描述GC事件
- log file switch相關等待事件事件
- 【效能調整】等待事件(五)log相關等待事件
- Dataguard主庫上與redo transport service相關的等待事件事件
- 【等待事件】等待事件系列(5.1)--Enqueue(佇列等待)事件ENQ佇列
- oracle library cache相關的等待事件及latchOracle事件
- 閒聊oracle SQL*Net相關的空閒等待事件OracleSQL事件
- SQL Server郵件相關SQL語句出現嚴重的ASYNC_NETWORK_IO等待事件案例SQLServer事件
- 【TUNE_ORACLE】等待事件之IO等待“direct path write”Oracle事件
- 【等待事件】等待事件系列(1)--User I/O型別事件型別
- 【TUNE_ORACLE】等待事件之IO等待“direct path read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file parallel write”Oracle事件Parallel
- 【TUNE_ORACLE】等待事件之IO等待“direct path write temp”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“read by other session”Oracle事件Session
- 【TUNE_ORACLE】等待事件之IO等待“db file sequential read”Oracle事件
- 【TUNE_ORACLE】等待事件之IO等待“db file scattered read”Oracle事件
- 第6 章、解釋與鎖有關的等待事件事件
- 與日誌有關係的幾個等待事件的解析事件
- 第7 章、解釋與延遲有關的等待事件事件
- sql執行期間相關的等待SQL
- 基礎IO相關操作
- 資料血緣系列(4)—— 資料血緣的特點與相關概念
- 關於log file sync等待事件的描述事件
- 關於DFS lock handle等待事件事件