问题现象
客户反馈,过完年后,系统卡顿严重。平时1分钟能打开的报表,现阶段需要几小时都查不出结果。严重影响系统使用体验。
问题分析
查看NMC发现,大量的线程处于卡顿状态,基本上耗时为数据库层面。都在执行sql。说明大概率问题是发生在数据库层面。
生成AWR报告发现,数据库的压力特别大。
发现在执行相关sql查询耗时严重,怀疑相关表缺少索引导致效率异常。查看相关执行计划发现执行计划走的不是很好,但是相关表上之前已经被创建索引。
故查看数据库相关表的统计信息,发现统计信息不准确。
--查看某统计信息不准的表
select last_analyzed,table_name from user_tables;
重新收集全表的统计信息。
--重新收集全库的统计信息
exec dbms_stats.gather_schema_stats(ownname => '用户',method_opt => 'for table for all indexed columns',estimate_percent => 100,degree => 8);
重新收集后,发现数据库的效率有所提升,但依旧查询很慢