龙空技术网

记一次访问数据库超时问题排查

猿小嗨的小钟 100

前言:

目前兄弟们对“数据库经常出现的问题怎么解决”大概比较重视,兄弟们都需要分析一些“数据库经常出现的问题怎么解决”的相关内容。那么小编同时在网摘上汇集了一些关于“数据库经常出现的问题怎么解决””的相关文章,希望同学们能喜欢,咱们快快来了解一下吧!

昨天测试团队反馈说,跑一些场景用例的时候,发现系统很卡,然后过一段时间就出现无法使用的情况。

于是我这边去排查,先看接口定位到那个服务出现的异常;

然后查看该服务的存于es上的日志,显示Cause: java.sql.SQLException: No operations allowed after statement closed.

出现这种情况,无外乎连接池的连接失效了,但是仍然存在于连接池之中。

检查数据库配置的wait_timeout、连接池大小等信息,发现无异常。

wait_timeout为24小时,连接池大小为1024

于是我这边去修改数据库连接配置,

idle-timeout设置为10分钟connection-timeout设置为30秒connection-test-query原本已存在maximum-pool-size调大为1000

更新验证。

过了一个小时,测试又跑过来说,又不行。

于是在排查观察日志发现还是数据库连接失效。

使用的是mybatis-plus理论上不需要手动关闭连接,连接池泄露风险。

ps:差点就去排查mybatis-plus的源码了。

突然一个念头出现,会不会数据库有问题呢?

于是去K8S看数据库日志。

刚已进入看到数据库被重启了99+次。

于是断定是数据库出现了问题。

去翻看数据库日志,出现InnoDB: corruption in the InnoDB tablespace.

应该是磁盘坏道了,于是回到服务日志,查看是那个sql触发的重启,发现是某个detail表;

于是使用命令对该表进行导出。刚执行导出命令,数据库就重启了。

于是拷贝里面的binlog文件出来,重新在新的节点去部署一个新的数据库。并将有磁盘坏道的设备告知公司的it工程师,由他们去检测以及修改。

题外话:大家对数据库所在设备尽量自己做好阵列,自动监控好设备。避免数据丢失。

标签: #数据库经常出现的问题怎么解决