偶遇 smon 进程cpu 开销高异常分析

摘要:
今天,我突然发现一个在线oracle数据库的服务器CPU运行得很高。我不认为这很正常。我仔细看了看。发现smon进程消耗了一个CPU。因此,很清楚smon进程正在为smon进程打开10046。分析跟踪文件只是一条sql语句。这是从sys.smon_scn_time中删除smon_scn_timedelete,其中thread=0andcn=SQL˃selectcount(*);COUNT(*)-------------57123SQL˃selectobject_idfromdb_objectswhereobject_name='MON_SCN_TIME';对象ID----------------575SQL˃从v$locked_OBJECT中选择*,其中对象ID=575;XIDUSNXIDSLOCTXIDSQNOBJECT_ IDSESSION_ ID--------------------------------------------ORACLE_ USERNAMEOS_ USER_ NAMEPROCESS----------------------------------------------------------------------------LOCKED_MODE--------------271533429575164 oracle308013--行独占锁检查下一个mos。找到文档LOCKONSYS.SMON_SCN_TIME此故障的症状:SMON进程将启动数据库_ SCN_TIME添加一个锁。根本原因是表和索引不一致。为什么smon_scn_时间表和索引会不一致?
今天突然发现线上一台oracle 数据库 servercpu 跑的非常高。感觉不是非常正常,细致看了下。发现是smon 进程吃掉了一个cpu。

那么这个smon 进程究竟在倒腾啥玩意
对smon 进程开启10046 跟下不就全明了了么

分析trace 文件就这么一个sql语句 ,这玩意在删smon_scn_time 
delete from smon_scn_time where thread=0 and scn =  (select min(scn) from smon_scn_time where thread=0)

SQL> select count (*) from sys.smon_scn_time; 
  COUNT(*)
----------
     57123


SQL> select object_id from dba_objects where object_name = 'SMON_SCN_TIME'; 
 OBJECT_ID
----------
       575


SQL> select * from v$locked_object where object_id = 575;
    XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID
---------- ---------- ---------- ---------- ----------
ORACLE_USERNAME                OS_USER_NAME                   PROCESS
------------------------------ ------------------------------ ------------
LOCKED_MODE
-----------
        27         15      33429        575        164
                               oracle                         30801
          3---行独占锁


查了下mos。找到一个文档LOCK ON SYS.SMON_SCN_TIME (文档 ID 747745.1)
本故障的现象:
smon 进程在数据库一启动后就会对smon_scn_time 加一个锁。而且永远都不会释放
根本原因是表和索引不一致。每次删除记录为0条,因此删除操作会一直持续,为了保证表中记录小于
最大映射范围值。




With the Partitioning, OLAP and Data Mining options
[oracle@lixora adump]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jul 15 09:25:26 2015
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

----限制smon更新 smon_scn_time 表
SQL> alter system set events '12500 trace name context forever, level 10 ';
System altered.

---手动清理表记录
SQL> delete from smon_scn_time;
2452 rows deleted.

SQL> commit;
Commit complete.

----关闭限制
SQL> alter system set events '12500 trace name context off ';

System altered.



这里留了一个疑惑?

为什么smon_scn_time 表和索引会不一致呢?







免责声明:文章转载自《偶遇 smon 进程cpu 开销高异常分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇手把手教你反编译别人的appIntelliJ IDEA 2017.3/2018.1 激活下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

这样做,免费从Oracle同步数据

点击▲关注 “数据和云” 给公众号标星置顶 更多精彩 第一时间直达 刘伟 刘伟,云和恩墨软件开发部研究院研究员;前微博DBA,主要研究方向为开源数据库,分布式数据库,擅长自动化运维以及数据库内核研究。 不得不承认的一点是,当前数据库的使用趋势,至少在国内,是逐渐从Oracle转向MySQL(扩大化概念的话,就是包括PG等在内的开源数据库,以及rds类的云...

增量检查点和完全检查点

1、完全检查点在Oracle8i之前,数据库的发生的检查点都是完全检查点。完全检查点会将数据缓冲区里面所有的脏数据块写入相应的数据文件中,同时将最新的checkpoint scn更新到所有的数据文件头部及控制文件。保证数据库的处于一致的状态。需要注意的是,完 全检查点产生的时候,CKPT并不是把当前完全检查点发生那一时刻的SCN更新到控制文件和数据文件头,...

oracle恢复删除的数据

分为两种方法:scn和时间戳两种方法恢复。 一、通过scn恢复删除且已提交的数据   1、获得当前数据库的scn号     select current_scn from v$database; (切换到sys用户或system用户查询)      查询到的scn号为:1499223   2、查询当前scn号之前的scn     select * from...

ORACLE 11G 闪回技术(闪回数据库、表、回收站)

ORACLE 11G 闪回技术(闪回数据库、表、回收站) weixin_45389319分类专栏: 数据库 文章标签: 数据库版权闪回数据库就是将数据库回退到过去的一个时间点或scn上,从而实现数据库的恢复,这种恢复不需要通过备份,所以更方便、更快速。该功能不基于撤销数据,而是基于闪回日志。 语法flashback 【standby】 database d...

ORACLE实例恢复过程详细分析--使用dump、BBED等多种工具结合分析

---友情提示,内容较多,可以从博文左上的+目录选择小节方便阅读。  实验思路:  --实验相关TRACE文件:http://download.csdn.net/detail/q947817003/6646723 1.数据库OPEN,,做DML操作不提交,查看检查点。 2.SHUTDOWN ABORT并重启到MOUNT并查询检查点 3....

oracle之检查点(Checkpoint)

检查点是一个数据库事件,它把修改数据从高速缓存写入磁盘,并更新控制文件和数据文件。检查点分为三类:1)局部检查点:单个实例执行数据库所有数据文件的一个检查点操作,属于此实例的全部脏缓存区写入数据文件。触发命令:svmrgrl>alter system checkpoint local;这条命令显示的触发一个局部检查点。2)全局检查点:所有实例(对应并...