前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Oracle 故障处理]记一次大事务回滚导致的数据库奇慢

[Oracle 故障处理]记一次大事务回滚导致的数据库奇慢

作者头像
bsbforever
发布2020-08-18 23:51:13
1.3K0
发布2020-08-18 23:51:13
举报

这个专题讲一些日常运维的异常处理

以前的请查看:

http://www.zhaibibei.cn/oracle/1.1/

今天讲一次大事务回滚导致的数据库奇慢

1. 现象

公司一套测试数据库User反应查询还可以,做DML操作没有反应,会hang住

2. 原因查找

2.1 查看等待事件

select* from v$session_wait order by event desc ;

发现有大量的checkpoint incompletedWait for a undo record等待

2.2 诊断 checkpoint incomplete

通过v$session_wait 对应的SID号对应的进程全部对应到的是并行进程(J000-J016)

2.3 查询并行状态

SELECT QCSID, SID, INST_ID "Inst", SERVER_GROUP "Group", SERVER_SET "Set", DEGREE "Degree", REQ_DEGREE "Req Degree" FROM GV$PX_SESSION ORDER BY QCSID, QCINST_ID, SERVER_GROUP, SERVER_SET;

上面语句可以查找出 coordinator 的SID,通过查询其对应的是SMON进程

该进程是数据库的主进程我们无法对其做操作

2.4 诊断Wait for a undo record

通过搜索我们查出如下网站有所发现

http://expertoracle.com/2017/06/19/wait-for-a-undo-record-or-wait-for-stopper-event-to-be-increased-database-messages/

从上面我们得知当Oracle做大事物回滚时smon进程会作为coordinator 启动并行恢复

这时就可能会导致数据库DML语句无法继续

2.5 查询undo表空间使用率

SELECT round(((SELECT (NVL(SUM(bytes), 0))FROM dba_undo_extents WHERE tablespace_name = (select value from v$parameter where lower(name) = 'undo_tablespace') AND status IN ('ACTIVE', 'UNEXPIRED')) * 100) / (SELECT SUM(bytes) FROM dba_data_files WHERE tablespace_name = (select value from v$parameter where lower(name) = 'undo_tablespace')), 2) PCT_INUSE FROM dual

2.6 查看当前事务占用的undo大小

SELECT s.sid, s.username, s.program, t.name, t.used_ublk * (SELECT value/1024/1024 FROM v$system_parameter2 WHERE name='db_block_size') as "undoMB", flag,space,recursive,noundo,ptx, t.start_time start_mmddyy, t.status FROM v$transaction t, v$session s WHERE t.addr=s.taddr(+) ORDER BY t.used_ublk DESC;

2.7查看undo表空间各个时间段retention大小

select to_char(begin_time, 'DD-MON-RR HH24:MI') begin_time, to_char(end_time, 'DD-MON-RR HH24:MI') end_time, tuned_undoretention from v$undostat order by end_time;

3.问题处理

临时解决方案我们需要调整fast_start_parallel_rollback参数为false

修改后重启数据库

fast_start_parallel_rollback = false scope=spfile;

如果不使用spfile,可能会导致大量enq: PE - contention等待

重启后等待回滚完成可将值修改回来

4.关于FAST_START_PARALLEL_ROLLBACK

该参数用于指定回滚的并行度,当使用fast-start parallel rollback时 smon充当coordinator角色并开启相应的多个J00进程,他可以有三个值

  • FALSE: Parallel rollback is disabled
  • LOW: Limits the maximum degree of parallelism to 2 * CPU_COUNT
  • HIGH : Limits the maximum degree of parallelism to 4 * CPU_COUNT

当修改该参数时rollback会停止并重新启动

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅必备 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这个专题讲一些日常运维的异常处理
    • 2. 原因查找
      • 2.1 查看等待事件
      • 2.2 诊断 checkpoint incomplete
      • 2.3 查询并行状态
      • 2.4 诊断Wait for a undo record
      • 2.5 查询undo表空间使用率
      • 2.6 查看当前事务占用的undo大小
      • 2.7查看undo表空间各个时间段retention大小
    • 3.问题处理
      • 4.关于FAST_START_PARALLEL_ROLLBACK
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档