12.1的MMON的监控SQL消耗很高的CPU以及频繁出现ORA-12850 或者 ORA-12751错误 (文档 ID 2440137.1)
文档内容
12.1版本中因为监控行为,导致 MMON 进程占用大量的 CPU。
适用于:
Oracle Database Cloud Exadata Service - 版本 N/A 和更高版本
Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 12.1.0.1 和更高版本
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
Oracle Database Exadata Cloud Machine - 版本 N/A 和更高版本
本文档所含信息适用于所有平台
症状
- 大量的 CPU 时间花费在 MMON_SLAVE 的执行监控的 SQL 语句:
WITH MONITOR_DATA AS (SELECT INST_ID, KEY, NVL2(PX_QCSID, NULL, STATUS)STATUS,
FIRST_REFRESH_TIME, LAST_REFRESH_TIME, REFRESH_COUNT, PROCESS_NAME, SID, SQL_ID,
SQL_EXEC_START, SQL_EXEC_ID, DBOP_NAME, DBOP_EXEC_ID, SQL_PLAN_HASH_VALUE,
SESSION_SERIAL#, SQL_TEXT, IS_FULL_SQLTEXT, PX_SERVER#, PX_SERVER_GROUP, PX_SERVER_SET,
PX_QCINST_ID, PX_QCSID, CASE WHEN ELAPSED_TIME < (CPU_TIME+ APPLICATION_WAIT_TIME+ CONCURRENCY_WAIT_TIME+ CL
...; -
无论是 RAC 或非 RAC,在告警日志中会不断出现ORA-12850的报错,失败的 SQL 语句都是基于 GV$SQL_MONITOR 的查询。错误信息:
Thu Sep 08 04:00:41 2016
Errors in file /app/oracle/diag/rdbms/dbname/dbinstance/trace/dbinstance_m002_14490.trc:
ORA-12850: Could not allocate slaves on all specified instances: 3 needed, 2 allocated -
在没有使用并行时,也会有 ORA-12751的错误出现。
更改
数据库升级到12.1
原因
12C 中引入 “自动捕获报告” 的特性,该特性的其中一部分功能,MMON_SLAVE 进程会监控占用资源较多的 SQL,并且自动对这些 SQL 产生 SQL 监控报告。
作为新特性,这些SQL占用一定的CPU资源也是预期的。这些SQL可以在(G)V$SQLSTATS中查询到。
如果相关的 SQL 占用太多的 CPU 资源,那么是不正常的,很可能是由于优化器使用了不好的执行计划引起。
可能是和12C的新特性“自适应查询” 有关:
解决方案
1,关闭“自动捕获报告”的特性。
上面的设置没有任何负面影响,该设置只会关闭“自动捕获报告”的特性,不会关闭原来的 SQ Monitor 的功能,SQL Monitor 的功能可以被正常使用。
或者
2,在 OS 层面杀掉 MMON_SLAVE 进程,sid和serial可以在 ASH 数据中获得。
Document 1924126.1 12.1.0.2 Patch Set Updates - List of Fixes in each PSU
参考
NOTE:21749315.8 - Bug 21749315 - ORA-600 [keomnReadBindsFromStream:magic]
BUG:24554937 - ORA-12850 WHILE MMON SLAVE AUTOMATIC REPORT FLUSH ACTION