SMON的作用还包括清理死事务:Recover Dead transaction。当服务进程在提交事务(commit)前就意外终止的话会形成死事务(dead transaction),PMON进程负责轮询Oracle进程,找出这类意外终止的死进程(dead process),通知SMON将与该dead process相关的dead transaction回滚清理,并且PMON还负责恢复dead process原本持有的锁和latch。 我们来具体了解dead transaction的恢复过程:

SQL> select * from v$version;BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - ProductionSQL> select  * from global_name;GLOBAL_NAME
--------------------------------------------------------------------------------
www.oracledatabase12g.comSQL>alter system set fast_start_parallel_rollback=false;
System altered.设置10500,10046事件以跟踪SMON进程的行为SQL> alter system set events '10500 trace name context forever,level 8';
System altered.SQL> oradebug setospid 4424
Oracle pid: 8, Unix process pid: 4424, image: oracle@rh2.oracle.com (SMON)SQL> oradebug event 10046 trace name context forever,level 8;
Statement processed.在一个新的terminal中执行大批量的删除语句,在执行一段时间后使用操作系统命令将执行该删除操作的
服务进程kill掉,模拟一个大的dead transaction的场景SQL> delete large_rb;
delete large_rb[oracle@rh2 bdump]$ kill -9 4535等待几秒后pmon进程会找出dead process:
[claim lock for dead process][lp 0x7000003c70ceff0][p 0x7000003ca63dad8.1290666][hist x9a514951]在x$ktube内部视图中出现ktuxecfl(Transaction flags)标记为DEAD的记录:SQL> select sum(distinct(ktuxesiz)) from x$ktuxe where ktuxecfl = 'DEAD';SUM(DISTINCT(KTUXESIZ))
-----------------------29386SQL> /SUM(DISTINCT(KTUXESIZ))
-----------------------28816以上KTUXESIZ代表事务所使用的undo块总数(number of undo blocks used by the transaction)==================smon trace content==================
SMON: system monitor process posted
WAIT #0: nam='log file switch completion' ela= 0 p1=0 p2=0 p3=0 obj#=1 tim=1278243332801935
WAIT #0: nam='log file switch completion' ela= 0 p1=0 p2=0 p3=0 obj#=1 tim=1278243332815568
WAIT #0: nam='latch: row cache objects' ela= 95 address=2979418792 number=200 tries=1 obj#=1 tim=1278243333332734
WAIT #0: nam='latch: row cache objects' ela= 83 address=2979418792 number=200 tries=1 obj#=1 tim=1278243333356173
WAIT #0: nam='latch: undo global data' ela= 104 address=3066991984 number=187 tries=1 obj#=1 tim=1278243347987705
WAIT #0: nam='latch: object queue header operation' ela= 89 address=3094817048 number=131 tries=0 obj#=1 tim=1278243362468042
WAIT #0: nam='log file switch (checkpoint incomplete)' ela= 0 p1=0 p2=0 p3=0 obj#=1 tim=1278243419588202
Dead transaction 0x00c2.008.0000006d recovered by SMON

=====================
PARSING IN CURSOR #3 len=358 dep=1 uid=0 oct=3 lid=0 tim=1278243423594568 hv=3186851936 ad='ae82c1b8'
select smontabv.cnt,smontab.time_mp,smontab.scn,smontab.num_mappings,smontab.tim_scn_map,smontab.orig_threadfrom smon_scn_time smontab,(select max(scn) scnmax,count(*) + sum(NVL2(TIM_SCN_MAP, NUM_MAPPINGS, 0)) cntfrom smon_scn_timewhere thread = 0) smontabvwhere smontab.scn = smontabv.scnmaxand thread = 0END OF STMT
PARSE #3:c=0,e=1354526,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1278243423594556
EXEC #3:c=0,e=106,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=1278243423603269
FETCH #3:c=0,e=47065,p=0,cr=319,cu=0,mis=0,r=1,dep=1,og=4,tim=1278243423650375
*** 2011-06-24 21:19:25.899
WAIT #0: nam='smon timer' ela= 299999999 sleep time=300 failed=0 p3=0 obj#=1 tim=1278243716699171
kglScanDependencyHandles4Unpin():cumscan=3 cumupin=4 time=776 upinned=0

以上SMON回滚清理Dead transaction的过程从"system monitor process posted"开始到"Dead transaction 0x00c2.008.0000006d recovered by SMON"结束。另外可以看到在恢复过程中SMON先后请求了'latch: row cache objects'、'latch: undo global data'、'latch: object queue header operation'三种不同类型的latch。 现象 fast_start_parallel_rollback参数决定了SMON在回滚事务时使用的并行度,若将该参数设置为false那么并行回滚将被禁用,若设置为Low(默认值)那么会以2*CPU_COUNT数目的并行度回滚,当设置为High则4*CPU_COUNT数目的回滚进程将参与进来。当我们通过以下查询发现系统中存在大的dead tranacation需要回滚时我们可以通过设置fast_start_parallel_rollback为HIGH来加速恢复:

select sum(distinct(ktuxesiz)) from x$ktuxe where ktuxecfl = 'DEAD';==============parallel transaction recovery===============*** 2011-06-24 20:31:01.765
SMON: system monitor process posted msgflag:0x0000 (-/-/-/-/-/-/-)*** 2011-06-24 20:31:01.765
SMON: process sort segment requests begin*** 2011-06-24 20:31:01.765
SMON: process sort segment requests end*** 2011-06-24 20:31:01.765
SMON: parallel transaction recovery begin
WAIT #0: nam='DFS lock handle' ela= 504 type|mode=1413545989 id1=3 id2=11 obj#=2 tim=1308918661765715
WAIT #0: nam='DFS lock handle' ela= 346 type|mode=1413545989 id1=3 id2=12 obj#=2 tim=1308918661766135
WAIT #0: nam='DFS lock handle' ela= 565 type|mode=1413545989 id1=3 id2=13 obj#=2 tim=1308918661766758
WAIT #0: nam='DFS lock handle' ela= 409 type|mode=1413545989 id1=3 id2=14 obj#=2 tim=1308918661767221
WAIT #0: nam='DFS lock handle' ela= 332 type|mode=1413545989 id1=3 id2=15 obj#=2 tim=1308918661767746
WAIT #0: nam='DFS lock handle' ela= 316 type|mode=1413545989 id1=3 id2=16 obj#=2 tim=1308918661768146
WAIT #0: nam='DFS lock handle' ela= 349 type|mode=1413545989 id1=3 id2=17 obj#=2 tim=1308918661768549
WAIT #0: nam='DFS lock handle' ela= 258 type|mode=1413545989 id1=3 id2=18 obj#=2 tim=1308918661768858
WAIT #0: nam='DFS lock handle' ela= 310 type|mode=1413545989 id1=3 id2=19 obj#=2 tim=1308918661769224
WAIT #0: nam='DFS lock handle' ela= 281 type|mode=1413545989 id1=3 id2=20 obj#=2 tim=1308918661769555*** 2011-06-24 20:31:01.769
SMON: parallel transaction recovery end

但是在real world的实践中可以发现当fast_start_parallel_rollback= Low/High,即启用并行回滚时常有并行进程因为各种资源互相阻塞导致回滚工作停滞的例子,当遭遇到这种问题时将fast_start_parallel_rollback设置为FALSE一般可以保证恢复工作以串行形式在较长时间内完成。 如何禁止SMON Recover Dead transaction 可以设置10513事件来临时禁止SMON恢复死事务,这在我们做某些异常恢复的时候显得异常有效,当然不建议在一个正常的生产环境中设置这个事件:

SQL> alter system set events '10513 trace name context forever, level 2';System altered.10531 -- event disables transaction recovery which was initiated by SMONSQL> select ktuxeusn,2         to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') "Time",3         ktuxesiz,4         ktuxesta5    from x$ktuxe6   where ktuxecfl = 'DEAD';KTUXEUSN Time                         KTUXESIZ KTUXESTA
---------- -------------------------- ---------- ----------------17 24-JUN-2011 22:03:10                0 INACTIVE66 24-JUN-2011 22:03:10                0 INACTIVE105 24-JUN-2011 22:03:10                0 INACTIVE193 24-JUN-2011 22:03:10            33361 ACTIVE194 24-JUN-2011 22:03:10                0 INACTIVE194 24-JUN-2011 22:03:10                0 INACTIVE197 24-JUN-2011 22:03:10            20171 ACTIVE7 rows selected.SQL> /KTUXEUSN Time                         KTUXESIZ KTUXESTA
---------- -------------------------- ---------- ----------------17 24-JUN-2011 22:03:10                0 INACTIVE66 24-JUN-2011 22:03:10                0 INACTIVE105 24-JUN-2011 22:03:10                0 INACTIVE193 24-JUN-2011 22:03:10            33361 ACTIVE194 24-JUN-2011 22:03:10                0 INACTIVE194 24-JUN-2011 22:03:10                0 INACTIVE197 24-JUN-2011 22:03:10            20171 ACTIVE7 rows selected.================smon disabled trans recover trace==================SMON: system monitor process posted
*** 2011-06-24 22:02:57.980
SMON: Event 10513 is level 2, trans recovery disabled.

了解你所不知道的SMON功能(五):Recover Dead transaction相关推荐

  1. 了解你所不知道的SMON功能(一):清理临时段

    SMON(system monitor process)系统监控后台进程,有时候也被叫做system cleanup process,这么叫的原因是它负责完成很多清理(cleanup)任务.但凡学习过 ...

  2. 了解你所不知道的SMON功能(十二):Shrink UNDO(rollback) SEGMENT

    SMON对于Undo(Rollback)segment的日常管理还不止于OFFLINE UNDO SEGMENT 转载于:https://blog.51cto.com/maclean/1278486

  3. 了解你所不知道的SMON功能(三):清理obj$基表

    SMON的作用还包括清理obj$数据字典基表(cleanup obj$) OBJ$字典基表是Oracle Bootstarp启动自举的重要对象之一: SQL> set linesize 80 ; ...

  4. 由一个案例引出SMON的一个功能: Recover Dead transaction

    一.故障说明 前段时间一朋友遇到的案例,根据他的描述,我小整理了一下. 数据库环境:AIX + ORACLE 10.2.0.5, 单机. 朋友说一个大事务不能完成回滚操作,系统异常. 查看等待事件,如 ...

  5. 智能外呼系统具有你所不知道的四大功能

    人工智能在这些年发展之迅猛是有目共睹,各类如智能家居.智能无人机等产品频繁出现在我们的生活中,人工智能的应用覆盖面很广,在各行各业可以说是无处不在的,就比如智能外呼系统.如今做电销已经不能只靠话术来撑 ...

  6. android 系统功能,安卓8.0系统对比安卓8.1系统 安卓8.1系统那些你所不知道的新功能...

    想必大家都知道,搭载安卓系统的手机用上一段时间就会出现卡顿的现象,这不在Android 8.0正式版推送两个月后,谷歌最近面向开发者预览通道推送了Android 8.1系统更新.相对于现在已有的安卓8 ...

  7. 互联网人群画像和你所不知道的真相

    作为新时代互联网营销的关键部分,人群画像引起了诸多兴趣,近年颇为风靡.几乎所有的互联网广告供应商都不约而同的强调,他们有足够精确的人群画像数据,确保能够找到广告主真正的受众.但是事情果真如此吗?人群画 ...

  8. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

    https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...

  9. python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路

    原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...

最新文章

  1. windows无法远程
  2. Consumer group理解深入
  3. 威纶通触摸屏与mysql_威纶触摸屏应用实例 以及威纶通触摸屏配方组合
  4. 利用 Enterprise Library 改善你的应用系统1
  5. Basic64 编码解码
  6. Python学习路程day9
  7. delphi中单独编译pas生成dcu文件
  8. 车企建设CDP可能会遇到的坑和挑战,从CRM、SCRM到CDP
  9. 计算机联锁接口,计算机联锁接口设计规范.doc
  10. arm9处理器 java_ARM处理器系列介绍
  11. 一文读懂自然语言处理NLP
  12. 关于将驱动整合至ESXi镜像过程中的一些小坑
  13. 【Godot 插件】获取编辑器上所有的节点
  14. 标准型微电脑酸碱度氧化还原电位控制器(UPH -100C)
  15. strstr strcmp
  16. 怎样才能让网站建设效果更加出色
  17. ssm毕设项目大学生社团管理系统r1w2y(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. 关于nxp平台上i2c扫描不到wm8960地址的问题
  19. 输入卡号校验银行名称以及其它校验
  20. 2018 ACM-ICPC 中国大学生程序设计竞赛暨丝绸之路程序设计竞赛

热门文章

  1. 最短路--DijkstraFloyedSPFA
  2. cxf返回的报文,命名空间无前缀
  3. ATS (apache traffic server) http_ui 设置与使用
  4. 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2
  5. Python 装饰器学习以及实际使用场景实践
  6. Filter与Servlet的区别和联系
  7. SSAS-MDX#001 - MDX 基本结构
  8. 彻底清除计算机远程桌面连接的历史记录
  9. c++排序数组下标_看动画学算法之:排序 - 基数排序
  10. 基于stm32简易计算机电路图,基于STM32的简易电子计算器设计与实现(DOC).doc