删除smon_scn_time表上索引后数据没有更新,SMON进程占cpu较高。
数据库版本:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for HPUX: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
操作系统版本:
HP-UX husoaa04 B.11.31 U ia64
问题描述:
从主机层面可以看到SMON进程CPU使用率过高
从AWR报告中可以看到如下SQL语句大量的被执行
delete from smon_scn_time where thread=0 and time_mp = (select min(time_mp) from smon_scn_time where thread=0);
对表结构进行分析报错
处理:
删除索引
drop index smon_scn_time_scn_idx;
drop index smon_scn_time_tim_idx;
创建索引
create unique index smon_scn_time_scn_idx on smon_scn_time(scn);
create unique index smon_scn_time_tim_idx on smon_scn_time(time_mp);
分析smon_scn_time表和索引
analyze table smon_scn_time validate structure cascade;
但是处理完成后还出现smon进程占用CPU过高的情况。
smom_scn_time 表中数据并长时间没有更新。
请问上述问题,需要手动清理smon_scn_time表中数据吗?还是需要观察一段时间?
搞清楚smon执行的SQL有没有完成过, 虽然你创建了索引,但不代表 smon就能立即用上。
一般来说重启可以绕过该问题 问题凌晨时候就处理了,处理完成后,我检查了一下无效对象。看到有不少sys的对象失效了,我重新编了无效对象后,smon_scn_time中的数据正常跟新了 --查询无效对象无语
SELECT owner, object_type, object_name, status
FROM all_objects
WHERE status = 'INVALID'
ORDER BY owner;
--编译无效 SQL 脚本,然后运行语句
SELECT CASE WHEN object_type = 'SYNONYM' AND owner = 'PUBLIC' THEN
'alter ' || owner || ' ' || DECODE(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) || ' ' || object_name || ' ' || DECODE(object_type, 'PACKAGE BODY', 'COMPILE BODY', 'COMPILE') || ';'
ELSE
'alter ' || DECODE(object_type, 'PACKAGE BODY', 'PACKAGE', object_type) || ' ' || owner || '.' || object_name || ' ' || DECODE(object_type, 'PACKAGE BODY', 'COMPILE BODY', 'COMPILE') || ';'
END "SQL_COMMANDS"
FROM dba_objects
WHERE object_type IN ('PACKAGE', 'PACKAGE BODY', 'VIEW', 'PROCEDURE', 'FUNCTION', 'TRIGGER', 'SYNONYM')
AND status = 'INVALID'
ORDER BY DECODE(object_type, 'TRIGGER', '99', '00');
页:
[1]