MySQL 提高性能的办法
短连接存在的一个风险,就是一旦数据库处理得慢一些,连接数就会暴涨。
max_connection参数,用来控制一个MySQL最大连接数,超过这个值,系统就会提示“too many connections”从而导致数据库不可用。
解决方案
1.先处理掉那些占着链接但是不工作的线程。
如果连接数过多,可以优先断开事务外空闲太久的链接;如果这样还不够,在考虑断开事务内空闲太久的链接。
使用 kill connection + id的方式,使用show processlist查看结果。
2.减少连接过程的消耗
跳过权限验证的方法是:重启数据库,并使用-skip-grant-tables参数启动。这样连接过程和语句执行过程都会跳过权限校验阶段。(但是不建议这么做,风险极高)。
慢查询性能问题
1.索引没有设计好
2.SQL语句没写好
3.MySQL选错了索引
1.上线前,在测试环境,把慢查询日志打开,并且把long_query_time设置成0,确保每个语句都会被记录
2.在测试表插入线上的数据,做一遍回归测试
3.观察慢查询里每类语句的输出,特别留意Row_examined字段是否一致。
call query_rewrite.flush_rewrite_rules() 这个存储过程,是让插入的新规则生效,也就是我们说的“查询重写”。
QPS突增问题
1.如果是由全新业务的bug导致的,那么就可以从数据库直接把白名单去掉。
2.如果这个新功能使用的单独的数据库用户,可以直接删除用户。
3.如果跟主题功能绑定在一块,使用语句重写的功能,把压力最大的SQL直接重写成“select 1”返回。