oracle db table 查询数据慢问题分析、解决

     开发丢过来一段sql 反馈在正式库查不出数据,跑了好几分钟无反应,问是不是表被锁住了。

      看了下sql 只是简单的条件查询,oracle select 是不加锁的,手动select count(*) from table 居然跑了好久无结果,记得是几百万的小表,速度不应那么慢,查看执行计划,全表扫描行源才几千,明显小于表上几百万的数据行数,怀疑是统计信息失效导致,查看dba_tab_statistics 视图发现对应速度慢的表的行栏位stale_stats 值为YES,说明统计信息是过期的,于是手动收集表的统计信息,再次检查stale_stats值为NO。重新select count(*)  查询速度恢复正常,秒出结果,测试开发提供的速度慢的sql,执行速度也恢复正常。

     与开发沟通,了解有job 会定期往该表批量写入、删除数据,刚好该时间段有大批量更新、删除数据动作,数据变化量超过阈值导致统计信息失效引发性能故障,记录之。

posted @ 2021-04-08 19:25  踏雪无痕2017  阅读(518)  评论(0)    收藏  举报