线上出现点击某个查询后系统卡死不动,CPU占用率80%以上,重启项目其他功能都正常,查看日志error信息
"message": The error may involve com.*.*.*.*.ZlList_DT-Inline\r\n### The error occurred while setting parameters\r\n### SQL: select C.*,B.MC,A.MC BDZMC FROM BDZ A JOIN ZSB B ON A.ID=B.BDZID JOIN DATA_DC_DT C ON B.ID=C.ZSBID WHERE B.LXID='12' AND B.ID=? ORDER BY C.D_TIME desc\r\n### Cause: java.sql.SQLException: GC overhead limit exceeded\n; GC overhead limit exceeded; nested exception is java.sql.SQLException: GC overhead limit exceeded",
执行业务时,数据量太大导致占满内存,然后连续多次 GC 都只回收了不到2%的极端情况下才会抛出。
初步分析为SQL查询的数据太多导致
SQL中对时间进行倒叙排列分组,但时间之前是无索引的,几十万条数据取出倒数几百条,会导致全表扫描
解决:对时间字段创建倒叙索引
CREATE INDEX dt_time_desc ON ‘表名’ (D_TIME DESC)
再次执行SQL
还是没走索引,加上limit后
发现走索引了