Pmon和Smon回滚被Kill会话未提交事务引发问题的探讨(旧文初发)
今天在群里,和小MEC讨论KILL SESSION的问题引出了这么个问题:也就是KILL SESSION后,该SESSION未提交事务的回滚有哪个进程来完成的问题,先前还和他及SUN讨论了V$SQLAREA中字段USERS_EXCUTING的什么值表示SQL正在处理及什么值表示SQL没在处理的问题,晚上没事情参考了ORACLE的官方资料,结果如下:
首先,前一个问题,也就是SESSION KILLED后,未提交事务由哪个后台进程回滚的问题,我查阅了官方文档,ORACLE11G CONECOPTS,里面有关于各后台进程的陈述,又参考了OCP官方教材ORACLE9iDBA Fundamentals 1-i,其中有对各后台进程的明确陈述,结果是,SESSION KILLED后,未提交事务是由后台进程PMON来执行回滚的。
其次,后一个问题,不知道为什么,结果字各V$SQL视图里,都没发现今天SUN说的那个字段,以后见到SUN 再问问,先解决到这里。
接着写,今天遇到了SUN,和他谈了很多,人很不错,他那天说的是V$SQLAREA里的USERS_EXCUTING字段,我查了一下ORACLE11G的官方文档,结果和我们想的都相去甚远,原文是:USERS_EXECUTINGNUMBERTotal number of users executing the statement over all child cursors
是执行语句的用户的数目,我们都很吃惊,SUN也提出了质疑,他的平台是ORACLE10G,以为是版本间的差别或改动,结果晚上我费了半天劲查到了ORACLE10G的文档,结果同样,没什么变动,不知道文档是对的,还是文档出现了问题,ORACLE的文档越来越不可信。
----------------------------------------------------------
《高性能SQL调优精要与案例解析》
blog1:http://www.cnblogs.com/lhdz_bj
blog2:http://blog.itpub.net/8484829
blog3:http://blog.csdn.net/tuning_optmization