資源供給:併發性控制和mutex之三
我的文章裡解釋的不細緻而且模糊點很多,大家可以參考呂海波先生的文章: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的考慮是必須的,甚至可以是首先考慮的範疇。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資源供給:併發性控制和mutex之一Mutex
- 資源供給:併發性控制和mutex之二Mutex
- 資源供給:IO子系統之三
- 資源供給:記憶體和虛擬記憶體記憶體
- 資源供給:IO子系統之一
- 資源供給:IO子系統之二
- 資源供給:IO子系統之五
- 資源供給:IO子系統之七
- JVM 併發性: Java 和 Scala 併發性基礎JVMJava
- Go 併發程式設計之 MutexGo程式設計Mutex
- Go併發程式設計--Mutex/RWMutexGo程式設計Mutex
- 資源供給:再談記憶體和虛擬記憶體記憶體
- oracle資料併發性和一致性Oracle
- 【資料庫】併發控制資料庫
- 【Go進階—併發程式設計】MutexGo程式設計Mutex
- Java併發程式設計-併發程式設計的Bug源頭:可見性、原子性和有序性問題Java程式設計
- 資料併發性和一致性——資料庫概念資料庫
- 資料庫事務和MVCC多版本併發控制資料庫MVC
- go併發之goroutine和channel,併發控制入門篇Go
- 併發控制
- Java併發程式設計Bug源頭:可見性、原子性和有序性問題Java程式設計
- 資料複製的併發控制
- Guava併發:使用Monitor控制併發Guava
- goroutine併發控制Go
- mysql併發控制MySql
- PGSQL併發控制SQL
- oracle併發控制Oracle
- SQLite學習手冊(鎖和併發控制)SQLite
- HBase 事務和併發控制機制原理
- 第10章:併發和分散式程式設計 10.1併發性和執行緒安全性分散式程式設計執行緒
- 構建“資料要素×”的保障中臺和安全供給
- Kubernetes 併發控制與資料一致性的實現原理
- Kubernetes併發控制與資料一致性的實現原理
- 資料庫併發控制幾隻——事務資料庫
- 併發程式設計之:JUC併發控制工具程式設計
- QT分頁控制元件,開源,供大家使用QT控制元件
- PostgreSQL 併發控制機制(3):基於時間戳的併發控制SQL時間戳
- Java 併發和多執行緒(一) Java併發性和多執行緒介紹[轉]Java執行緒