问题背景信息:
应用反馈应用界面点击某功能时,返回结果信息特别慢,而且在高并发下,返回结果的时间会更慢,查看数据库服务器cpu等信息发现,cpu的使用率高达百分之90以上,根据v$sessions视图查询到该功能的sql,在管理工具中执行秒出。

排查问题的流程:

1)应用停止对外开放返回结果慢的功能,因现场环境有测试库,所以安排应用系统在本地部署应用连接测试库,发现本地应用连接测试库无生产环境的问题,然后通过本地应用连接生产库,点击该功能发现执行时间为8秒,再对比测试库的ini文件发现基本相同,对比本地和生产环境应用的jdbc驱动,驱动一致。结论:只有生产环境有该问题。

2)拿出问题的sql进行排查,首先查看该sql的执行计划,因sql中带有参数,执行计划的查看可以不用带值,执行计划看不出问题,并且管理工具和disql执行该语句都是秒出。

3)怀疑是执行计划缓存问题,dump下应用执行该语句的执行计划。

select * --cache_item

from v$cachepln where upper(sqlstr)=’sql’;

– sqlstr可以使用like进行模糊查询。

根据如上sql查出问题sql的cache_item号。

根据如下sql生成trace文件

Alter session set events

'immediate trace name plndump level cache_item号’;

会在生产环境的dm.ini同级的trace文件夹中产生trace文件,可以执行多次上面语句,信息都会存储在一个文件中。

4)查看trace文件信息发现问题sql的执行计划走的有问题,没有走索引。

达梦数据 监控 达梦数据库坑人_达梦数据 监控


问题原因:残留的缓存影响了执行计划。

解决办法:清理执行计划缓存:call sp_clear_plan_cache()

()里面的内容可以写具体某个执行计划的cache_tiem号,也可以不写,不写就是清除所有执行计划缓存,可能会对其他sql有影响。

应用反馈信息:应用验证该功能模块,结果秒出,问题解决。