Mysql超时。
- 此时查看mysql性能趋势,通常会发现CPU打满,基本上可以确认和慢查询有关。
- 打满的这个时间段,每条sql的执行都会超时,但是罪魁祸首就那么几条。
如何避免写出慢Sql
- 慢sql对数据库的影响,是一个从量变到质变的过程,对量的把握需要有一个认知。
- 影响mysql的处理因素很多,比如
服务器配置
,数据库数量
,mysql参数配置
,数据库繁忙程度
,通常这些因素的影响大概在几倍的性能差距,所以我们只要大概掌握一个大致量级,就足够了。
执行SQL数量
- 一台mysql数据库,大致处理极限是
每秒一万条简单sql(一万TPS),简单sql是指类似主键查询这种不需要遍历很多记录的sql
。根据服务器的配置,可能低的几千,高的几万。 - 由于实际的系统不可能只有简单sql,所以实际的TPS要打很多折扣。一般一台mysql服务器,
每秒几百条SQL,已经算非常繁忙了
。
执行SQL时长
- 查询时长基本上和遍历数据行数正相关,
如果遍历行数百万以内,只要不是每秒钟都要执行几十上百次,可以认为是安全的;遍历行数在几百万的,查询时间最少也要几秒钟,就要仔细考虑优化;遍历行数千万量级的,不应该出现在在线系统。
- 遍历行数在千万左右,是Mysql查询的一个坎。单个表的数据量,也要尽量控制在一千万条以下,最多不要超过二三千万。
原因很好理解,千万级别的,带WHERE条件的查询可能还能接受,但是联表的话,很可能需要遍历的数据就超千万级别了。
使用索引
- 索引会提高查询效率,降低插入、删除和更新的性能。
- 读多写少,多建索引;写多读少,可以少建。