資源供給:併發性控制和mutex之三

sunsapollos發表於2013-12-17
我的文章裡解釋的不細緻而且模糊點很多,大家可以參考呂海波先生的文章:http://www.itpub.net/thread-1813629-1-1.htm 來簡單瞭解latch和mutex。

    mutex的優化,當mutex處於最低粒度的時候,事實上優化的餘地就非常小,比如在latch優化中常用的熱點分佈在mutex基本上是不可實踐的。

   我們在講latch的時候講到latch優化主要涉及三點:
  
   減少latch次數
  熱點分佈,降低latch衝突
  降低latch持有時間

  mutex的優化同樣可以遵循上面三點來完成:
  一、降低mutex次數
   對於mutex來說沒有任何區別
  降低mutex次數採用完全和latch相同的方法進行。
  二、降低熱點分佈
   對於cursor pin採用和library cache pin同樣的熱點分佈方式,應用SQL分離。
   本來除此以外,mutex是不可調整的,幸運的是Oracle 11.2.0.2之後Oracle對於mutex給出了有效的熱點分離技術,以記憶體交換。
   對於熱點的Library cache obect和cursor都可以進行熱點clone,使併發的mutex可以得到緩解。
   具體參見: http://andreynikolaev.wordpress.com/2011/05/01/divide-and-conquer-the-true-mutex-contention/
                  metalink: 9282521.8 and 9239863.8

  三:降低mutex持有時間
   當然latch的優化對於mutex都有效,這裡主要闡述下_mutex_spin_count。
   _mutex_spin_count的預設值是255,比較latch的2000要小很多。考慮到mutex由於其細粒度,衝突往往要大大小於 latch,_mutex_spin_count的預設值也許是合理的,但是從優化的角度看,可能Oracle過於樂觀。同樣從衝突要大大小於latch 的角度的考慮,增加_mutex_spin_count的值也許從總體上是有力的,也就是說可以使session更快的獲得mutex,也許1024是一 個合適的值。
 
對於mutex,不同於latch的考慮,由於mutex剛剛經歷了10g到11g,甚至library cache mutex到11.2才開始提供,新東西總是會有很多的bug。也就是說,mutex的優化過程,bug的考慮是必須的,甚至可以是首先考慮的範疇。 
  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92650/viewspace-1063524/,如需轉載,請註明出處,否則將追究法律責任。

相關文章