MySQL 性能优化
避免使用短连接访问 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 重写掉。
如果是某个库的问题,并且使用的独立的账号,可以考虑禁用掉该账号。
如果有设置白名单 ,也可以删除白名单。