oracle等待事件之enq: CF – contentio

发布时间:2020-06-30 16:33:06 作者:艾弗森哇
来源:网络 阅读:300

Enqueue 是一种保护共享资源的锁定机制,避免因并发操作而损坏数据,Enqueue 采用排队机制,即 FIFO(先进先出)来控制资源的使用。在任何需要读取控制文件的动作时,就会发生等待事件enq: CF – contention,CF locks被用来串行化controlfile事务,在读和写控制文件的时候使用该锁。通常该锁的分配时间非常短,比如在下面事件中会分配该锁,那么也就可能发生enq: CF – contention等待事件:

  Checkpoint

  Redo Logfile的切换

  Redo lofileg的归档

  执行实例恢复

  操作redo logfile

  热备开始和结束

  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,其它会话如果也要更新控制文件的话,那么就要等待了。


推荐阅读:
  1. 如何在go中利用install/build生成的文件命名和路径
  2. 怎么在Mysql存储过程中利用游标循环对临时表进行读取

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

enq: cf – contention te nt

上一篇:安装了不同版本的python如何解决共存问题

下一篇:python导入txt数据库的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》