为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:V8
【操作系统】:
【CPU】:
【问题描述】*:统计信息收集后,测试环境的查询sql耗时缩短很明显,生产环境无变化,还能基于哪些方面排查呢?
【处理过程】:
(1)从某个操作慢入手,定位到了一个查询耗时62s的sql段;
(2)然后针对sql段内涉及到的数据表,分别进行了统计信息收集,执行sql如下:
DBMS_STATS.GATHER_TABLE_STATS(‘username’,‘table_name’,null,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
(3)执行后,测试环境耗时从62s缩短到0.09s,但生产环境无变化;
–查询语句缓存计划 select * from v$cachepln where sqlstr like ‘%%’;
–清理语句缓存计划sp_clear_plan_cache(cache_item);
可以尝试清理缓存计划看看效果
除了比对两边执行计划, 你还需要尝试比对,
1 测试环境和生产环境两边的关联所有的表的表结构和索引情况;
2 dm.ini配置里优化参数也是需要比对的,往往一个dm.ini配置参数可以改变sql执行结果。
然后,找出不同值后测试。
3 另外,测试环境里执行的时候是单纯sql执行,而生产环境执行sql实在很多sql同时执行情况下,所以还要比对执行时,两边数据库中的 表锁,事务等待情况,有否干扰。
生产环境上是不是数据量要比测试的多,可以看看执行计划和ET耗时