Oracle的系统监视器SMON?
SMON(System Monitor Process)进程用来做所有“系统级”的任务。PMON所对应的是各个进程,而SMON则是从系统级的视角出发,成为了数据库上的垃圾收集器。SMON所做的工作包括以下几种:
(1)清理临时表空间:原先清理临时空间这样的杂事都要由自己动手完成,随着引入了“真正”的临时表空间特性,这个负担已经减轻,但并不是说完全不需要清理了。例如,建立一个索引时,创建过程中为索引分配的区段被标记为TEMPORARY。如果出于某种原因CREATE INDEX会话异常中止了,SMON就要负责清理这些区段。其他操作创建的临时区段也是由SMON负责清理。
(2)合并空闲表空间:如果你在使用字典管理的表空间,SMON会负责取得表空间中相互连续的空闲区段,并把它们合并为一个更大的空闲区段。这种动作只出现在字典管理的表空间(并且使用了默认的存储子句),而且PCTINCREASE被设置为一个非0值的时候。
(3)针对原来不可用的文件恢复活动的事务:这类似于数据库启动时SMON的作用。在实例/崩溃恢复时由于某个文件(或某些文件)不可用,可能会跳过一些失败的事务,这些失败事务将由SMON来恢复。例如,磁盘上的文件可能不用或者未装载,导致部分事务失败,当文件变成可用时,SMON将会恢复这些事务。
(4)执行RAC中失败节点的实例恢复:在一个Oracle RAC配置中,集群中的一个数据库实例失败时,集群中的另外某个节点会打开该失败实例的重做日志文件,并恢复失败节点上的所有数据。
(5)清理OBJ$:OBJ$是一个底层的数据字典表,数据库中几乎每个对象(表、索引、触发器、视图等)都在其中对应一个条目。很多情况下,有些条目表示的可能是已经删除的对象,或者表示“not there”的对象(“not there”对象是Oracle依赖关系机制中使用的一种对象),要由SMON进程来删除这些不再需要的行。
(6)管理撤销段:SMON会负责实施撤销(undo)段的自动上下线(onlining 和offlining),以及收缩撤销段。
(7)回滚段离线:当使用手动的回滚(rollback)段管理,DBA可以让一个有活动事务的回滚段离线(offline),或将其置为不用状态。这是候有可能还有活动事务还在使用已离线的回滚段。在这种情况下,回滚段并没有真正离线:它只是标记为“离线中”(pending offling)。之后,SMON会在后台定期尝试将其真正地离线,直至成功为止。
除此之外,SMON还会做许多其它的事情,如将DBA_TAB_MODIFICATIONS视图中的监视统计信息刷新输出,将SMON_SCN_TIME表中的SCN时间戳映射信息刷新输出,等等。随着时间的推移,SMON进程可能会累积使用大量的CPU时间,这是正常的。SMON会定期地醒来(或被其他后台进程唤醒),来执行这些维护工作。
评论
有用 6
墨值悬赏

