"Oracle数据库中由undo引起的告警分析及解决策略" 在Oracle数据库环境中,"undo"是一个关键组件,用于支持事务的回滚操作和多版本并发控制(MVCC)。当系统活动增加或减少时,Oracle的后台SMON(System Monitor)进程会自动管理undo段的ONLINE和OFFLINE状态,以适应当前的工作负载。然而,这种自动化管理有时可能导致一些性能问题,尤其是在undo段相关的latch(锁)或enqueue(队列)等待时间过长的情况下,系统可能会出现"enq: US - contention"告警。 "enq: US - contention"等待事件表明存在对rowcache(行缓存)中的dc_rollback_seg(回滚段)latch的竞争。这种情况通常发生在系统管理的undo模式下,特别是当自动调整的undo保留期在高工作负载下运行时。如果短时间内有大量的离线undo段被上线,那么latch和enqueue的处理能力可能无法跟上工作负载的速度,从而导致性能瓶颈。 解决此类问题的一个方法是调整数据库的设置,例如通过以下SQL命令限制同时在线的undo段数量: ```sql ALTER SYSTEM SET "_rollback_segment_count"=<n>; ``` 其中 `<n>` 应该替换为你期望的最大在线undo段数量。这个值需要根据你的系统配置和工作负载特性来确定。 另外,分析和监控以下视图可以帮助识别问题并找到解决方案: - `v$sysmetric` 和 `v$sysmetric_history`: 监控实时和历史的系统指标,如提交(commit)、回滚(rollback)次数。 - `dba_hist_sysmetric_history`: AWR报告中的历史系统指标,有助于识别性能变化趋势。 - `v$sysmetric_summary`: 提供AWR报告的汇总信息,可以查看特定的负载模式和性能指标。 如果你发现"enq: US - contention"等待事件频繁发生,可能需要考虑以下策略: 1. **优化事务处理**:减小事务的大小,避免大事务导致大量undo数据生成。 2. **调整undo表空间大小**:增加undo表空间大小,以便容纳更多的undo数据,减少回滚段的频繁切换。 3. **手动分配undo段**:在某些情况下,手动分配并固定undo段而不是使用系统自动管理,可以减少竞争。 4. **调整undo_retention参数**:适当延长或缩短undo数据的保留时间,以匹配工作负载的特性。 5. **监控和调整 latch 配置**:检查并调整数据库的latch设置,确保它们能够有效地处理当前的工作负载。 "undo引起的告警.txt"描述的问题涉及到Oracle数据库中undo管理的性能优化。通过深入理解undo的工作原理,监控关键性能指标,以及适时调整数据库参数,可以有效地缓解或消除"enq: US - contention"等待事件,从而提升系统的整体性能。
故障现象:enq: US -contention
故障原因:事务量突然增加
解决方法:ALTER SYSTEM SET "_rollback_segment_count"=<n>;
具体分析:
mos相关解释:
You have many offline undo segments and the workload starts to online many undo segments over a short period of time.
This can lead to high 'latch: row cache objects' contention may be seen on DC_ROLLBACK_SEGMENTS together with high 'enq: US - contention' waits
when using system managed undo with an auto tuned undo retention period。
The wait event "enq: US Contention" is associated with contention on the latch in the row cache (dc_rollback_seg).
Enqueue US - Contention can become a bottle-neck for performance if workload dictates that a lot of offlined undo segments must be onlined over a short period of time.
The latch on the row cache can be unable to keep up with the workload.
当系统activity增加或者降低的时候,oracle SMON进程会自动ONLINE或者OFFLINE rollback segments。这样导致某些与undo segments相关的latch或者enqueue被hold住太长时间,
导致系统很多活跃session都开始等待enq: US - contention。
一般情况下 稳定系统中突然出现的Enq:US 是因为并发事务数突然变多导致的,而实际引发并发事务数变多的可能是某些DML语句遇到了性能问题,导致事务处理速度变慢,或者是commit变慢所致。
针对上述问题,enq:US本身只是性能问题所导致的“果”,而不是原因,一般解决了上述问题,enq:US的这个果也就消失了。
方法1:查看长事物和并发事务的方法 基表视图 v$sysmetric,v$sysmetric_history,dba_hist_sysmetric_history ,v$sysmetric_summary
--查看一段时间内的commit,rollback的事务数 (dba_hist_sysmetric_summary视图对应于awr的Load Profile模块),如果取其他指标可以替换掉参数metric_name
select 'Commits rollback' metric_name, a.maxval, a.minval, a.average, b.begin_interval_time
from dba_hist_sysmetric_summary a, dba_hist_snapshot b
where a.metric_name in('User Commits Per Sec','User Rollbacks Per Sec')
and a.snap_id = b.snap_id
and a.instance_number = b.instance_number
and a.instance_number in (select instance_number from v$instance)
-- and a.end_time=...
order by a.snap_id desc;
方法2:查看 v$undostat dba_hist_undostat 中TXNCOUNT字段,
通过以上两步可以发现当前事务量突然增加。导致的产生此故障
解决方法:
1.Bounce the instance.
2.Setting _ROLLBACK_SEGMENT_COUNT to a high number to keep undo segments online:
ALTER SYSTEM SET "_rollback_segment_count"=<n>;这个操作需要重启数据库才能生效
_rollback_segment_count参数是控制非SYSTEM回滚段处于online状态的个数;
_rollback_segment_count参数越大,保持online状态的回滚段就越多。9i默认情况下oracle会自己去进行判断,
有自己的算法,随着不停的inactive和active操作,smon去offline和online回滚段,会加剧系统资源的消耗;
副作用是可能的数据库startup变慢
3.Set _UNDO_AUTOTUNE to FALSE:
ALTER SYSTEM SET "_undo_autotune" = false;
4.A fix to Bug:7291739 is to set a new hidden parameter, _HIGHTHRESHOLD_UNDORETENTION to set a high threshold for undo retention completely distinct from maxquerylen:
ALTER SYSTEM SET "_highthreshold_undoretention"=<n>;
相关资料
1:隐藏参数查看
set linesize 200;
col ksppinm format a40;
col ksppdesc format a50;
col ksppstvl format a20;
剩余5页未读,继续阅读
- 粉丝: 191
- 资源: 107
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构