数据库中有一张任务表
里面有百万千万数据,给 statsus 加了索引(考虑节约空间),正常只查询未完成状态数据,最多 1w 条,正常就是几百条
运行半年多,遇到白嫖用户大量提交任务,这类数据待执行有 20w+,当时表中数据有 400w 左右
下面 SQL 作用是查询当前执行中用户数量,然后均分每个用户最大任务数量
select nick from task where status = -1 group by nick
MySQL 执行优化任务这类走扫表更加合适,然后 CPU 就 100%
临时去掉这块代码,恢复正常
业务优化:在生产端限流,而不是消费限流
索引优化:status、nick 联合索引,不要心疼空间,出问题背上了跟着点空间相比,孰轻孰重