最近做一个高并发系统的性能优化,发现一个很有意思的问题,和大家分享一下:现象是系统在高峰期比较卡顿,perf top的图如下:
热点很明显,高频sql的执行计划走了全表扫描,但是分析了一遍SQL日志,发现SQL都走了索引,没有走全表扫描,怎么办呢?
这时可以开启达梦中的10003 事件的trace来找找全表扫描的SQL
--开启全表扫描跟踪
alter session 0 set events '10003 trace name context forever, level 1';
--关闭全表扫描跟踪
alter session 0 set events '10003 trace name context off';
--查看trace日志所在的目录
select * from v$dm_ini where para_name = 'TRACE_PATH';
通过10003事件的trace日志发现了一条SQL,如下:
select * from test where id= ?;
拿到管理工具里面看看执行计划: