Oracle性能調優之降低爭用和瓶頸

        接着上篇Oracle性能調優之超越表面分析法,我們接下來將討論Oracle性能調優之降低爭用和瓶頸。在將應用的需求降低到合理的範圍後,接下來要考慮處理Oracle服務器內部的爭用。有兩個或多個會話同時訪問一個資源,就會發生爭用,如鎖爭用或內存緩衝區爭用。
        在應用的需求涉及數據庫時,爭用—這個衆所周知的“瓶頸”會限制系統可以完成的工作量。從應用的角度看。數據庫處理得非常慢.甚至完全沒有反應。從更低層面看,例如從磁盤子系統來看,響應請求的速度比它的實際處理速度更慢。爭用瓶頸導致IO請求無法通過數據庫代碼層達到IO子系統。
        在Oracle數據應用中,表內記錄的爭用(通常表現爲鎖等待)和共享內存區域的爭用(表現爲門鎖等待、內存緩衝區等待以及諸如此類的等待)是兩種最常見的爭用行爲。
        應用設計是導致鎖爭用的主要原因:在Oracle的鎖機制中.需要讀操作永遠不等待鎖,寫操作也永遠不用等待讀操作,並且只在行級別上應用鎖,這樣Oracle纔可以很好地支持高併發的應用。鎖爭用發生時一般會涉及大量進程同時更新同一條記錄,或者特定的鎖持有的時間過長(可能是由於應用使用了悲觀鎖模型)。在不調整業務邏輯的情況下,這種爭用幾乎無法消除。此外,有些清況下,數據庫配置或模式(Schema )中的問題.或者數據庫的內部機制,都可能導致嚴重的鎖爭用。
        爭用是衆所周知的瓶頸。應用對數據庫服務的需求,對有限資源或串行資源的爭用導致等待與(或)排隊,表面上看對底層的需求降低了。
        當多個會話想要同時讀寫SGA中的共享內存時,會發生共享內存(shared memory)的爭用。所有的共享內存都由問鎖(latch)來保護。門鎖與鎖類似,不過它阻止的是對共享內存的併發訪問,而鎖則防止對錶中數據的併發修改。如果會話希望修改內存中的部分數據,它需要取得相關的門鎖或者互斤(mutex),如果另一個會話也希望訪問或修改同樣的數據,也同樣需要取得這個門鎖或互斥,這樣就會發生等待。緩衝區高速緩存(buffer cache)中的數據塊也會由於其他一些原因而發生爭用,比如當一個內存塊因爲多個會話的處理請求相互衝突而不可訪問時,就會出現大量緩衝區(buffer)等待。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章