在做性能壓力測試,測試結果不能通過,獲取現場一個小時的AWR報告,發現大量的等待事件,數據庫是RAC,版本是11.2.0.4.0。
1. 排在第一的等待事件是rdbms ipc reply , 解釋是The rdbms ipc reply Oracle metric event is used to wait for a reply from one of the background processes.說明lgwr,dbwr等後台進程空閒,等待前台進程給予他們的工作任務。DFS lock handle這個等待事件很可疑,官方解釋是:
The session waits for the lock handle of a global lock request. The lock handle identifies a global lock. With this lock handle, other operations can be performed on this global lock (to identify the global lock in future operations such as conversions or release). The global lock is maintained by the DLM.
大致意思是無法獲得global cache lock的handle時候所記錄的等待事件。
2. 在網上看了下大家的處理方式,序列的cache過小,數據庫服務器CPU過高,做過相應的調整和監控,都不解決問題。在做性能測試的時候,
select chr(bitand(p1,-16777216)/16777215) || chr(bitand(p1, 16711680)/65535) "Lock",
to_char(bitand(p1, 65536)) "Mode",
p2, p3 , seconds_in_wait
from v$session_wait
where event = 'DFS lock handle';
發現了BB鎖,意思是:2PC distributed transaction branch across RAC instances DX Serializes tightly coupled distributed transaction branches。
大致意思是分布式事務兩個RAC實例中across。我隨即做出調整,將weblogic連接改為只是連接一個RAC節點,再進行測試。測試結果如下:
3. 如何徹底解決呢?先說下DFS lock handle,說簡單一點就是一個object在不同的實例中DML。metalink中有關於DFS lock handle的都是bug,目前尚不清楚數據庫升級後是不是會好一點。