與IO相關的等待事件troubleshooting-系列5
'db file scattered read'
這是另一種常見的等待事件。他產生於Oracle從磁碟讀取多個塊到Buffer Cache中非連續("scattered")快取的時候。這種讀一次最大值是DB_FILE_MULTIBLOCK_READ_COUNT。這種典型場景像全表掃描(Full Table Scans)和全索引快速掃描(Fast Full Index
scans)。
如果這個等待事件佔據大部分等待時間,下面的方法可以用到:
1. 找到執行全表掃描或全索引快速掃描的SQL語句,進行調優以確保這些掃描是必須的,而不是非最優執行計劃導致的。
從Oracle 9i開始,新的V$SQL_PLAN檢視可以幫上忙:(忽略在這些查詢結果中的資料字典SQL)
對於全表掃描:
select sql_text from v$sqltext t, v$sql_plan p
where t.hash_value=p.hash_value and p.operation='TABLE ACCESS'
and p.options='FULL'
order by p.hash_value, t.piece;
where t.hash_value=p.hash_value and p.operation='TABLE ACCESS'
and p.options='FULL'
order by p.hash_value, t.piece;
對於全索引快速掃描:
elect sql_text from v$sqltext t, v$sql_plan p
where t.hash_value=p.hash_value and p.operation='INDEX'
and p.options='FULL SCAN'
order by p.hash_value, t.piece;
where t.hash_value=p.hash_value and p.operation='INDEX'
and p.options='FULL SCAN'
order by p.hash_value, t.piece;
在Oracle 8i,對於這種等待事件,通過查詢V$SESSION_EVENT可以找到執行多塊讀的session,然後使用SQL Tracing跟蹤這些session的SQL。另外,物理讀Top前幾位的SQL語句也能用來研究,判斷他們的執行計劃是否包含了全表掃描或全索引快速掃描。
2. 在這樣最優執行計劃就是多塊讀掃描的場景,可以通過調整多塊IO的容量進行調優,需要修改例項引數DB_FILE_MULTIBLOCK_READ_COUNT,計算:DB_BLOCK_SIZE x DB_FILE_MULTIBLOCK_READ_COUNT = 系統的max_io_size。
(可參考:
Document 30712.1 Init.ora Parameter "DB_FILE_MULTIBLOCK_READ_COUNT" Reference
Document 1037322.6 WHAT IS THE DB_FILE_MULTIBLOCK_READ_COUNT PARAMETER?)
正如之前所說的,從Oracle 10g R2開始,DB_FILE_MULTIBLOCK_READ_COUNT初始化引數現在可以自動調優,當未顯示設定時可以使用一個預設值。這個預設值和可以高效執行的最大IO容量相關。引數值依賴於平臺,對於大多數平臺是1MB。因為引數是以塊表示的,所以也可以設定為一個和可以高效執行的最大IO容量相當的值(被標準塊容量切分)。
3. 因為使用全表掃描和全索引快速掃描的塊會放到Buffer Cache取代鏈的最少最近使用端,有時使用多Buffer Pools,將這些段放到KEEP池中都會有所幫助。(可參考:Document 76374.1 Multiple Buffer Pools)
4. 使用分割槽能夠降低作為分割槽剪裁掃描資料的數量,限制段分割槽的掃描子集。
5. 最後,可以考慮最長訪問的段包含的資料數量(通過將舊的、不需要的資料移出資料庫),或將這些段移動到新的、更快的磁碟,以降低IO的響應時間。
(未完待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-773823/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 與IO相關的等待事件troubleshooting-系列9事件
- 與IO相關的等待事件troubleshooting-系列8事件
- 與IO相關的等待事件troubleshooting-系列7事件
- 與IO相關的等待事件troubleshooting-系列6事件
- 與IO相關的等待事件troubleshooting-系列4事件
- 與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事件
- 第5 章、解釋常見的與I/O 有關的等待事件事件
- 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相關操作
- 關於log file sync等待事件的描述事件
- 關於DFS lock handle等待事件事件