cpu使用率100%

xgemsdbp cpu 使用率100%
分析:
1.通过awr和ash报告检查发现:UPDATE ADM_SYSUSER SET LAST_LOGOUT_DT=:1,LAST_ACTIVITY_TIME=:2,ALIVE_DT=:3 WHERE USER_ID=UPPER(:4)
这条sql语句占用资源比较大;
2.start ?/rdbms/admin/sqltrpt.sql (sql优化经常用)
提示输入sql_id
如果提示There are no recommendations to improve the statement系统提示这样,不一定准确,可以手工检查一下执行计划
3.还可以检查一下这张表有多大,还有这张表上的索引情况,看一下是否使用索引是合适的
select bytes/1024/1024 from dba_segments where segment_name='ADM_SYSUSER';
BYTES/1024/1024

13(M)
select count() from ADM_SYSUSER;
COUNT(
)

10050(行)
select index_name from dba_indexes where table_name='ADM_SYSUSER';
INDEX_NAME

ADM_SYSUSER_IDX1
ADM_SYSUSER_IDX2
ADM_SYSUSER_IDX3
ADM_SYSUSER_PK
ADM_SYSUSER_IDX4
按照上面的提示信息可以看出,表不大,但是使用的索引很多,所以接下来需要确认:
这张表的数据是不是恒定的,会不会周期性的发生数据量的变化,这个确认完以后,再决定是不是要全量收集一下这张表的统计信息。
4.用户反馈
这个表,是不是经常update有问题呢
每次只要用户登录一下,就update一下
这边app设计的就是用户每次登录,然后更新
上次安科长建议要改source
5.那就等问题出现的时候收集一下统计信息看能不能解决问题(收集统计信息执行计划有可能会表,需要征求APP的同意)
如果每天8:30分CPU都比较高,可以在8:20分的时候收集一下统计信息,如果收集完了8:30分cpu不高了,说明问题解决了
exec dbms_stats.gather_table_stats(ownname=>'EMS',tabname='ADM_SYSUSER',estimate_percent=>100,degree=>dbms_stats.auto_degree,cascade=>TRUE);
estimate_percent=>100表小的话就100%收集,这样收集的更全面
dbms_stats.auto_degree 并行度,可以设置成auto,系统自己决定
cascade=>TRUE 连带索引一起收集
select owner from dba_tables where table_name='ADM_SYSUSER';
(ADM_SYSUSER表属于EMS用户)
6.收集完统计信息,发现没有解决问题 glance
7.建议:
1》增加db_cache
建议SGA增加8G,将新增的8G全部分配给db_cache
目前系统的buffer hit 命中率低于99%,建议增加db cache提升buffer hit命中率
2》增加PGA
建议PGA增加4G
3》重建ADM_SYSUSER表并加大pct_free值
重建ADM_SYSUSER表并加大pct_free 至50
4》确认是否可以删除多余索引
ADM_SYSUSER表建有5个索引,建议应用确认索引的用途,删除不用的索引

posted @ 2025-03-05 08:30  ocmji  阅读(25)  评论(0)    收藏  举报