避免使用短连接访问 MySQL

短连接在业务高峰可能导致连接数暴涨,当连接数超过设置的 max_connections 时,会导致后续的请求被拒绝。虽然可以修改 max_connections 让更多的请求进来,但是如果设置的太大可能导致没有多余的 CPU 资源去执行 SQL,CPU 一直忙着建立连接。

方法一:主动断开连接。

方法二:减少连接过程的消耗,让 MySQL 跳过权限校验。

慢查询性能问题

索引没有创建好

如果 MySQL 进程已经被打挂了,直接执行 alter table 就可以了。

如果服务还没有被打挂,并且是主备架构,可以考虑在备库上执行 alter table,在执行 alter table 前先关闭备库的 binlog,索引创建好后执行主备切换,然后在原来的主库上执行 alter table 创建索引,执行前也需要关闭 binlog。

SQL 语句没有写好

如果使用的是 MySQL 5.7 的版本,可以通过 query_rewrite 来重写有问题的 SQL。

MySQL 选错了索引

这里也可以通过 query_rewrite 来重写 SQL,让 SQL 可以使用正确的索引。

不过这个问题尽量在测试环境去提前发现,避免到生产环境,可以通过把 long_query_time 设置为 0,让所有的 SQL 被慢查询日志记录,然后关注慢查询日志中的 rows_examind(为了返回查询的数据,读取了多少行数)。

QPS 突增问题

如果是新功能引入的问题,考虑下掉新功能,保障其它功能可以正常使用。

如果是新功能的 SQL 有问题,可以考虑使用 query_rewrite 把有问题的 SQL 重写掉。

如果是某个库的问题,并且使用的独立的账号,可以考虑禁用掉该账号。

如果有设置白名单 ,也可以删除白名单。