背景
周六TIDB数据库物理机宕机,周日0点执行定时任务,第一次sql分页查询,就报错Error querying database.和maybe read truncated/dropped table data,马上查询资料,没有选数据库,或者mapper.xml有问题,或是尝试访问的某个键或记录在数据库中不存在或已被删除。。。
思考
1、确实执行到那一行sql就切换埋点库了,是不是没有选择数据库?是不是有人覆盖了代码?赶紧查看提交记录和解压,没有发现代码覆盖问题,上次更新也是前几天,怎么今天才出问题。
2、查看mapper.xml是否有代码没提交,导致报错,查看本地分支,没有异常。
3、周六宕机导致数据库,会不会导致丢数据,通过查数平台可以查询到前300条数据,但是count全量数据,一样的报错出现了,大概定位是宕机导致丢数据了。
排查
1、排除数据导入操作,因为该表只有实时埋点数据入库,和查询操作。
2、联系TIDB的DBA,查询数据库日志发现有几个慢sql对埋点表执行查询,耗时一整天了,最终数据库被拖垮,物理机宕机。
解决方案
1、由于数据库物理机宕机,只好提单重启了。
2、对于数据无法查询,把key编号给到DBA,大概范围锁定,通过切换region leader解决。数据修复后可以查询所有数据,至此事情暂告一段落,正常运行每天定时任务查询数据,生成数据文件。
反思
数据分析同事在处理数据文件的时候,需要对执行的sql进行评估和优化,慢sql需要优化,如果优化不了,可以水平或纵向切割来提取数据,生成excel,在excel进行数据拼接。(如时间跨度太大,切割几个时间段分别导出文件;如表连接,可分别导出所需字段,excel使用vlookup函数等拼接......)
是否会再次出现同样情况?
咨询DBA,给的答复是大概率不会出现,目前产研老师还在分析日志跟进中。。。。。。有后续会更新。