客户数据库出现SCHEDULER后台作业频繁调用XDB包,导致系统性能受到影响,数据库版本为10.2.0.3。
导致性能问题的SQL为:
BEGIN BEGIN IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner)) THEN xdb.XDB_PITRIG_PKG.pitrig_truncate(sys.dictionary_obj_owner, sys.dictionary_obj_name); END IF; EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN IF (xdb.DBMS_XDBZ0.is_hierarchy_enabled_internal(sys.dictionary_obj_owner, sys.dictionary_obj_name, sys.dictionary_obj_owner, xdb.DBMS_XDBZ.IS_ENABLED_RESMETADATA)) THEN xdb.XDB_PITRIG_PKG.pitrig_dropmetadata(sys.dictionary_obj_owner, sys.dictionary_obj_name); END IF; EXCEPTION WHEN OTHERS THEN NULL; END; END; |
这个SQL在一小时的时间内执行了120多万次,平均每秒要执行160次,难怪会导致性能问题。Oracle在文档SQL IN XDB.DBMS_XDBZ0 LINE 637 IS MAJOR CONSUMER OF CPU [ID 972671.1]对这个问题进行了说明,导致这个问题的原因是XDB用户调用了SYS.DBMS_SYS_SQL过程,Oracle提供了补丁Patch 4766344可以解决这个问题。