Oracle 性能之 Enq: CF - contention
Oracle 性能之 Enq: CF - contention
Table of Contents
1 原因
只要是需要读控制文件的操作期间,都调用并持有 CF enqueue, CF 块用于控制文件相关事务的序列化 操作和在控制文件共享部分的读写操作。
一般来说,控制文件的CF enqueue 锁的申请和持有时间是非常短暂的。
数据库的下列操作会调用该锁:
- checkpointing
- switching logfiles
- archiving redologs
- performing crash recovery
- logfile manipulation
- begin/end hot backup
- DML access for NOLOGGING objects
2 解决问题
2.1 针对持有锁进程类型处理
2.1.1 查看持有锁会话的进程类型
查找持有锁的会话:
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;查找申请锁的会话:
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;
2.1.2 根据进程类型采取不同的处理方法
后台进程
如果通过上面的SQL,发现持有锁的进程是后台进程,比如CKPT,LGWR,ARCn,等,并且已经持有相当 长一段时间,正常来说持有锁的时间是忽略不计的。 针对这种情况,检查redo 日志的切换频率,是不是过快,Oracle 推荐在30分钟左右切换一次。 查看方法如下:
SELECT
TO_CHAR(FIRST_TIME,'YYYY-MM-DD') DAY,
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'00',1,0)),'99') "00",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'01',1,0)),'99') "01",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'02',1,0)),'99') "02",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'03',1,0)),'99') "03",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'04',1,0)),'99') "04",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'05',1,0)),'99') "05",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'06',1,0)),'99') "06",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'07',1,0)),'99') "07",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'08',1,0)),'99') "08",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'09',1,0)),'99') "09",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'10',1,0)),'99') "10",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'11',1,0)),'99') "11",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'12',1,0)),'99') "12",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'13',1,0)),'99') "13",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'14',1,0)),'99') "14",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'15',1,0)),'99') "15",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'16',1,0)),'99') "16",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'17',1,0)),'99') "17",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'18',1,0)),'99') "18",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'19',1,0)),'99') "19",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'20',1,0)),'99') "20",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'21',1,0)),'99') "21",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'22',1,0)),'99') "22",
TO_CHAR(SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),'23',1,0)),'99') "23"
FROM
V$LOG_HISTORY
GROUP BY
TO_CHAR(FIRST_TIME,'YYYY-MM-DD')
ORDER BY 1 DESC;
2. 用户进程
假如是用户进程,并且持有锁的会话在不停的变动, 持有锁的会话的等待事件是“control file parallel write”.
那么,很有可能产生问题的根源是在nologging 对象上的DML操作。
Nologging 或者 unrecoverable 操作时,Oracle 会将执行这个unrecoverable操作时的SCN 记录进控制文件。
下列操作都会引起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
那么当进行以上操作时,持有锁的会话等待事件一般是"control file parallel wirte", 其 他会话此时再申请 CF enqueue, 就会出现"Ene: CF - contention".
这是一种正常的现象.
2.2 检查归档路径
如果以上都没有问题,可以再检查归档.保证归档路径可以正常访问。
3 总结
如果被堵塞,看实际情况是否可以kill 持有CF enqueue的会话。
前台进程持有CF enqueue:
如果严重影响数据库运行,考虑Kill掉持有锁的会话
- 后台进程持有CF enqueue, 可采取措施有
-
- 加大redo日志
- 合理安排任务执行时间,避免集中处理数据。
- (no term)
- 确保归档路径可以正常访问
Oracle 性能之 Enq: CF - contention的更多相关文章
- oracle 11g enq: JI – contention等待事件
最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查: JI enqueue is acquired in exclusive mode on th ...
- 性能问题,AWR High Event enq: US - contention
1.1问题现象 应用反馈业务执行SQL响应超时,需要数据库排除DB是否存在问题,创建AWR观察到top event 新增enq: US - contention ??? 1.2问题分析 1) DB ...
- 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)
[等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV - contention) 1 BLOG文档结 ...
- enq: TM - contention一例
今天下午,有台服务器出现异常,响应特别慢,io等待奇高,awr top 5事件如下: 经回查ash,找到了造成这些事件的sql语句,如下: select * from v$active_session ...
- Oracle性能问题sql调优脚本集
---------------------------------------------------------------------------------------------------- ...
- enq: DX – contention等待事件解决方法
前几日,一测试环境在dblink单表同步的时候(不管怎么说,目前仍然是同构数据库同步性能最快的方法,别听网上的扯淡,无论goldengate还是java层,都是比较慢的),某张表一直同步不过去,看了一 ...
- 【故障处理】队列等待之enq IV - contention案例
[故障处理]队列等待之enq IV - contention案例 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...
- enq: SQ - contention
--每分钟操作 SQL> select sql_id, mi, count(mi) 2 from (select event, sql_id, to_char(sample_time ...
- Analyzing 'enq: HW - contention' Wait Event (Doc ID 740075.1)
Analyzing 'enq: HW - contention' Wait Event (Doc ID 740075.1) In this Document Symptoms Cause ...
随机推荐
- CentOS7磁盘空间不足,却找不到占用空间的大文件
1 df -ah 显示/根目录占用百分之九十 进入根目录对指定的文件夹查询容量 cd / du -sh * | sort -n 磁盘有50G,加起来有10G左右的文件找不到 2 自己影响中,已经清理 ...
- Phoenix中的timestamp字段查询以及timestamp的比较查询
1 查询语法 SELECT TO_CHAR(createtime, 'yyyy-MM-dd HH:mm:ss') FROM USER 2 需要比较timestamp的语法查询 select * fro ...
- IPC之util.h源码解读
/* SPDX-License-Identifier: GPL-2.0 */ /* * linux/ipc/util.h * Copyright (C) 1999 Christoph Rohland ...
- Cobbler自动化装机脚本
#!/bin/bash ens33_ip=192.168.1.3 ens33_gateway=192.168.1.1 ens37_ip=192.168.207.2 dhcp_wd=192.168.20 ...
- JMeter 问题整理
1. 远程连接出现错误: java.net.connectexception: connection refused: connect -解决办法: 编辑jmeter.bat(windows OS), ...
- YII2.0.12兼容PHP7.2版本升级
YII2.0.12兼容PHP7.2版本升级 报错信息: FastCGI sent in stderr: "PHP message: PHP Fatal error: Cannot use ...
- 记录一下Web开发环境搭建 Eclipse-Java EE 篇
转自https://www.cnblogs.com/yangyxd/articles/5615965.html Web开发环境搭建 Eclipse-Java EE 篇 [原创内容,转载注名出处] 1. ...
- .NET平台的发展
.NET平台的发展.NET从1.0到.NET Core3.0:C#从1.0到8.0: ASP.NET从1.0到Core3.0: ASP.NET MVC1.0到ASP.NET MVC6.0,
- CSS基础学习-6.CSS属性_列表、表格
- 《Python基础教程》第六章:抽象(一)
用def定义函数 __doc__是函数属性.属性名中的双下划线表示它是个特殊属性