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
