日常系统问题解决:数据库查询停止
前提提要:前后端查询连接1分钟停止,查询失败。
问题大背景:
一个页面12个初始请求,其中两个down掉,分别在1分钟A查询及3分钟B查询发生。当前集中处理1分钟停止的查询A,目的是使其3个月查询量正确显示。
之前查询3个月数据可以,现在无法查询。首先推测查询语句、数据量增加这两个源头,针对处理。当前数据查询使用嵌套分类查询(并非同一个字段分类,故原始查询未做group by 处理),因此存在数据库压力的可能性。
已做处理
1、语句查询优化,单月38s->22s、双月 58s->36s 的增进,但3个月数据依旧无法查询出来。
优化内容:增加子查询筛选条件,减少过程数据。例如时间、范围。
2、异常查询停止,同时每单次循环查询后数据库压力释放, Thread.sleep(100);
增加此步骤后,查询3个月数据的A查询可以了,用时66-78s波动,B查询用108s-130s波动。代价是单月22s->24.5s,36s->36s。**可庆祝的是查询出来了!完成最初目的,3个月查询量正确显示。**后续六个月数据验证,A查询 1.9分钟,B查询2.7分钟。9个月数据 ,A查询 2.4分钟,B查询3.1分钟
3、数据库超时配置设置,避免异常查询占用。数据库超时配置增加,由原本默认8小时调整为10分钟
同时设置interactive_timeout、wait_timeout内容,此处需要先后设置,避免设置失败。由于服务使用jdbc查询,故需要让wait_timeout正确配置。
参考来源:https://developer.aliyun.com/article/282234
SET GLOBAL interactive_timeout = 600;
SET GLOBAL wait_timeout = 600;
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
还在持续优化中
如果有已解决的,多劳留言;