Enqueue 是一種保護共享資源的鎖定機制,避免因并發操作而損壞數據,Enqueue 采用排隊機制,即 FIFO(先進先出)來控制資源的使用。在任何需要讀取控制文件的動作時,就會發生等待事件enq: CF – contention,CF locks被用來串行化controlfile事務,在讀和寫控制文件的時候使用該鎖。通常該鎖的分配時間非常短,比如在下面事件中會分配該鎖,那么也就可能發生enq: CF – contention等待事件:
l???Checkpoint
l???Redo Logfile的切換
l???Redo lofileg的歸檔
l???執行實例恢復
l???操作redo logfile
l???熱備開始和結束
l???Nologging 事物的DML操作
如果某個事物設置了nologging屬性,那么如下動作更容易產生該等待事件:
direct load (SQL*Loader) direct-load INSERT CREATE TABLE ... AS SELECT CREATE INDEX ALTER TABLE ... MOVE PARTITION ALTER TABLE ... SPLIT PARTITION ALTER INDEX ... SPLIT PARTITION ALTER INDEX ... REBUILD ALTER INDEX ... REBUILD PARTITION INSERT, UPDATE, and DELETE on LOBs in ? NOCACHE NOLOGGING mode stored out of line |
???????查詢該等待事件的holder
鄭州不孕不育醫院:http://yyk.39.net/zz3/zonghe/1d427.html
select l.sid, p.program, p.pid, p.spid, ? s.username, s.terminal, s.module, s.action, s.event, s.wait_time, ? s.seconds_in_wait, s.state from v$lock l, v$session s, v$process p where l.sid = s.sid and s.paddr = p.addr and l.type='CF' and l.lmode >= 5; |
???????查詢該等待事件的waiter
select l.sid, p.program, p.pid, p.spid, ? s.username, s.terminal, s.module, s.action, s.event, s.wait_time, ? s.seconds_in_wait, s.state from v$lock l, v$session s, v$process p where l.sid = s.sid and s.paddr = p.addr and l.type='CF' and l.request >= 5; |
???????原因分析及解決辦法:
如果holder是后臺進程,比如lgwr,ckpt,arcn等,那么檢查redo log大小,切換頻次,檢查fast_start_mttr_target的設置,檢查歸檔路徑是否可用。
如果是holder是前臺進程,那么大都是由于nologging的事物上正在發生DML或者DDL,此時由于nologging屬性,那么oracle需要向控制文件中記錄unrecoverable SCN,典型的是伴隨enq: CF – contention的通常還有control file parallel write,這個會話在寫的過程中持有CF locks,其它會話如果也要更新控制文件的話,那么就要等待了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。