mysql遇到性能问题,当然是优先恢复业务,这里分析几个场景。
短连接风暴
max_connections参数表示数据库支持的最大的链接数,超过这个数量会抛异常“too many connections”.
当mysql负载比较大的时候,每个链接的处理时间也比较长,极有可能出现“too many connections”,通过增加max_connections来解决这个场景不是好主意,因为mysql负载已经很大了
解决办法是
- kill掉空闲链接
- 跳过权限验证,减少链接时候的消耗。方式时通过-skip-grant-tables参数重启数据库。
show processlist查看所有链接。
max_connections表示的是所有的链接,但是有些链接并没有处于running状态,可以kill掉
优先kill不在事务里的链接,损失小
慢查询
慢查询的原因有三种
- 索引没有设计好。直接alter table加索引。
- sql语句没写好。mysql5.7提供query_rewrite,可以在线替换sql。
- mysql没有选对索引。用query_rewrite给sql加上force index
QPS暴增
由于业务暴增或者业务bug导致qps暴增
DBA可以做这样几件事
- 如果有应用白名单,直接去掉这个应用
- 如果有业务账号分离,把这个应用所使用的账号删掉
- 用query_rewrite功能止血