RAC平臺的全域性熱塊衝突

xz43發表於2010-11-19
    全域性熱塊衝突時RAC平臺經常出現的一種等待事件,這種等待如果比較嚴重的話,會對系統的效能產生十分重大的影響,甚至導致資料庫被短時間掛住。
    全域性熱塊衝突和普通的熱塊衝突類似,普通的熱塊衝突是在一個單節點上多個會話訪問相同的資料庫導致的等待事件。如果大量會話訪問某個或者某些特定的資料塊,那麼這些資料塊被稱為熱塊。相比單例項環境,全域性熱塊衝突的危害更大,因為全域性的熱塊需要在例項間進行傳遞。嚴重的全域性熱塊衝突會導致系統效能急劇下降。
    最典型的案例就是,如果某個應用要對某張表進行大批次的資料插入,而且插入的程式都跑在一個節點上,那麼這個系統可能會出現一些buffer busy waits等待事件,不過不會產生很嚴重的效能問題。如果這個應用的負載均衡方式分佈在不同的節點上,那麼透過STATSPACK/AWR報告中,我們可能看到下面的情況:
Top 5 Timed Events                                                                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Event                                                        Waits               Time(s)            ....
buffer busy waits                                  17149             12743                 .............
gc buffer busy                                        21057             12348                .............
enq:HW - contention                      ...............
CPU time                                                            ...............
gc current block 2-way                         ...............
對於這種情況,需要在應用的底層進行設計。比如很常用的一種方法,就是在某張表中設計一個INSTANCE_ID欄位,插入資料時,每個例項插入的資料中都帶有INSTANCE_ID,然後按INSTANCE_ID對這種表進行分割槽,兩個例項之間的gc buffer busy爭用就會大幅減少。

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

相關文章