與IO相關的等待事件troubleshooting-系列3

bisal發表於2013-10-05

解決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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章