與IO相關的等待事件troubleshooting-系列3
解決IO問題的常用方法:
使用Statspack類似的工具對資料庫響應時間分析之後,已經表明與IO相關的等待事件限制了系統效能,有許多的方法可以判斷這種問題。
接下來的章節會介紹排查等待事件的方法。
有一些方法可以不用管特定的等待事件。在這個章節,會介紹和解釋每個方法背後的概念和基本原理。
通過對SQL的調優降低資料庫的IO請求:
沒有使用者SQL使用的資料庫只會產生很少甚至不產生IO。最終由資料庫產生的IO都會直接或間接地源於使用者執行的SQL的本質和數量。
這就意味著通過控制SQL語句產生IO的數量,有可能限制資料庫的IO請求。通過調優SQL可以達到這樣的目的,讓他們的執行計劃產生最小的IO運算元量。
在典型的問題場景下,可能只有很少的SQL,由於他的執行計劃非最優,導致產生比常用更多的物理IO,降低資料庫的整體效能。
從Oracle 10g開始,ADDM通過自動識別最有影響的SQL語句,可以輔助SQL調優過程。然後,SQL調優建議器能夠用來自動調整這些語句,降低IO資源消耗。(可以參考Document 262687.1 How to use the Sql Tuning Advisor)。
通過調整例項引數降低資料庫的IO請求:
1. 使用記憶體緩衝限制IO:
資料庫需要的IO數量受記憶體緩衝量的限制,例如Buffer Cache,Log Buffer,不同的Sort Areas等。增大Buffer Cache,可以為資料庫程式(邏輯IO)產生提供更多的buffer訪問,滿足將磁碟(物理IO)讀取轉為記憶體讀取。如果有更大的記憶體排序區,那麼排序操作期間資源消耗殆盡,導致不得不使用磁碟的臨時表空間,這樣的可能性就會降低。其它快取也依照類似的概念工作。
2. 調整多塊IO(10g之前)的大小:
獨立的多塊IO操作大小能夠通過例項引數控制。當達到極限值時,相比使用更多更小的IO,使用更少更大的IO時,多塊IO會執行得更快,例如,同樣傳輸100Mb的資料,相比每次100Kb的資料傳輸請求1000次,或者每次10Kb的資料傳輸10000次,每次1Mb的資料傳輸100次顯然要完成得更快。當達到極限值後,區別就不那麼明顯了:1Gb的資料傳輸,每次10Mb大小請求100次(如果作業系統最大IO傳輸大小限制允許),可能和一次傳輸1Gb大小的效率一樣。究其原因,是因為一次IO處理的時間主要包括兩個元件:
IO建立時間:
對於不同的IO容量基本一致,對於小IO容量則佔據總體服務時間的大部分。
IO傳輸時間:
隨著IO容量的增長而增加,對於小IO容量,通常小於IO建立時間。
以上的結果,在10g R2以前,通過配置DB_FILE_MULTIBLOCK_READ_COUNT引數以使資料庫可以使用更大、更少的多塊IO,來更好地配置例項。
10g R2之後,這個引數會自動設定,不建議人為修改。可參考:Document 841444.1 How To Set DB_FILE_MULTIBLOCK_READ_COUNT in 10g。
作業系統級別的IO優化:
充分利用IO處理能力,例如非同步IO,或具有高階功能的檔案系統,例如直接IO(繞過作業系統檔案快取)。另一種方法就是提高單次傳輸允許的最大IO容量限制(參考本文的max_io_size)。
通過使用Oracle ASM(Automatic Storage Manager)平衡資料庫IO:
ASM在Oracle 10g中引入。他是一種檔案系統,一種卷管理器,內建於資料庫核心。他可以自動並行地進行所有磁碟驅動器的負載均衡,防止熱點與效能最大化,甚至對於有資料快速更新的環境也適用。它能防止碎片化以至於從來不需要遷移資料回收空間。所有磁碟上的資料可以很好的平衡與條帶化。細節也可以參考Document 249992.1 New Feature on ASM (Automatic Storage Manager)。
通過使用條帶化,RAID,SAN或NAS平衡資料庫IO:
這種方法依賴於儲存技術,例如條帶化,RAID,儲存區域網路(SAN)和網路附加儲存(NAS),他們可以在多物理磁碟之間自動地平衡資料庫IO的負載,目的就是避免磁碟爭用和IO瓶頸,因為在儲存硬體上可能還有未使用的磁碟空間。更多的技術細節可以參考:"Optimal Storage Configuration Made Easy" by J. Loaiza,Document 30286.1 I/O Tuning with Different RAID Configurations。
通過在不同的檔案系統,控制器和物理裝置中手工移動資料庫檔案,重新分佈資料庫IO:
這是在缺少高階現代儲存技術下的一種方法。目的就是為了分發資料庫IO,以至於IO請求中不會有單組磁碟或控制器處於飽和,這裡可能還有未使用的磁碟空間。與之前的方法相比,這種方法可能使用起來更困難,通常可能沒用。
在大多資料庫中IO是肯定存在的。之前介紹的所有方法都考慮後,如果已存系統的效能仍舊不滿足,那可以考慮:
通過將舊的資料遷移,降低當前資料庫的資料卷容量。
使用更多、更快的硬體。
(未完待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7192724/viewspace-773783/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 與IO相關的等待事件troubleshooting-系列9事件
- 與IO相關的等待事件troubleshooting-系列8事件
- 與IO相關的等待事件troubleshooting-系列7事件
- 與IO相關的等待事件troubleshooting-系列6事件
- 與IO相關的等待事件troubleshooting-系列5事件
- 與IO相關的等待事件troubleshooting-系列4事件
- 與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相關操作
- 關於log file sync等待事件的描述事件
- 關於DFS lock handle等待事件事件
- oracle等待事件3構造一個Direct Path write等待事件和構造一個Log File Sync等待事件Oracle事件