数据库查询超时
一句话:数据库连上了,但某个查询迟迟没返回结果,常见原因是查询太慢(缺索引)、数据量太大、或者锁等待。
它是什么
和"连接失败"不同,超时是能连上数据库,但某个具体操作执行太久没结果,系统主动放弃等待并报错。多数时候是SQL查询本身效率低,或者被别的事务锁住了。
适合干什么
- 页面加载某个功能特别慢并最终报错
- 定时任务/批量处理跑到一半超时失败
不适合干什么
- 完全连不上数据库的情况(那是 database-connection-failed)
普通人怎么用
先看是哪条SQL/哪个接口超时的,拿这条SQL去数据库里单独跑一次,看它本身要跑多久;如果很慢,多半是缺索引或者查询条件不合理(比如没加WHERE条件就查全表)。
进阶用户怎么用
用数据库自带的执行计划工具(如MySQL的EXPLAIN)分析查询语句有没有用上索引;检查是不是有长事务/锁没释放导致别的查询排队;调大超时时间只是临时缓解,不能根治慢查询。
常见误区
- 以为调大超时时间设置就能解决问题,实际只是把"报错"延后,用户体验依然很差
- 以为超时都是数据库配置问题,其实80%是SQL语句本身写得低效
和相似工具的区别
- 和 slow-sql 高度相关:慢查询是原因,超时是结果,解决慢查询往往就解决了超时
入门步骤
- 定位是哪个具体操作超时
- 单独跑这条查询看实际耗时
- 用EXPLAIN看有没有走索引,缺索引就加