短连接风暴
第一种方法:先处理掉那些占着连接但是不工作的线程。
在show processlist的结果里,kill显示为sleep的线程,但是如果线程中存在事务,事务只能回滚,所以优先kill事务外空闲的连接。
通过查information_schema库的innodb_trx表,查看事务的具体状态。
第二种方法:减少连接过程的消耗。
跳过权限验证,重启数据库,并使用–skip-grant-tables参数启动。这样,整个MySQL会跳过所有的权限验证阶段,包括连接过程和语句执行过程在内。但是存在安全问题,尤其是当数据库可以外网访问时,更不能使用。
慢查询性能问题
导致慢查询的第一种可能是,索引没有设计好。
导致慢查询的第二种可能是,语句没写好。
MySQL 5.7提供了query_rewrite功能,可以把输入的一种语句改写成另外一种模式。
导致慢查询的第三种可能,可能是MySQL选错了索引。
使用查询重写功能,给原来的语句加上force index。
- 上线前,在测试环境,把慢查询日志(slow log)打开,并且把long_query_time设置成0,确保每个语句都会被记录入慢查询日志;
- 在测试表里插入模拟线上的数据,做一遍回归测试;
- 观察慢查询日志里每类语句的输出,特别留意Rows_examined字段是否与预期一致。
QPS突增问题
业务方把功能停掉。
小结
你是否碰到过,在业务高峰期需要临时救火的场景?你又是怎么处理的呢?