摘要
排序引起的慢查询,通常不是那么容易发现,经常和数据分布有关系。往往在业务刚开始时并没有什么问题,但是随着业务的发展,数据分布呈现一种特定的规律,导致了慢查询,或者并不是什么慢查询,但是随着并发请求数增加,数据库的IOPS使用率变高,进一步导致cpu/内存使用率飙高。造成线上故障。
问题
因为排序引起的问题遇到很多次
例1:某日收到线上cpu告警
然后查看慢sql日志
大量的慢查询指向了这个查询
SELECT
id,
prize_id,
user_id,
name,
biz_id
FROM play
WHERE biz_id = xx
AND status = 1
AND prize_type = '大奖'
ORDER BY id DESC
LIMIT 0, 10
play是抽奖记录表,sql是查抽中奖品的前10个大奖中奖者,来吸引其他用户参与抽奖,biz_id建了索引
例2 某日上线一个新功能,在第五次压测时,数据库cpu告警
查看数据库慢日志,没有一条慢sql(耗时>100ms)。最后通过查阅代码,sql调用统计。发现有大量下面的SQL调用
SELECT
id,
commit_id
FROM commit_record
WHERE biz_id = 'xxx'
AND id >= #{fromId}
AND id <= #{toId}
biz_id有索引<