短连接
短连接模型存在一个风险,就是一旦数据库处理的慢一些,连接数就会暴涨。max_connections参数,用来控制一个MYSQL实例同时存在的连接数的上限,超过这个值,系统就会拒绝接下来的来连接请求,并报错提示“Too many connections”。对于被拒绝连接的请求来说,从业务角度看就是数据库不可用。
调高max_connections的值,有可能导致已经连接的线程拿不到CPU资源去执行业务的SQL请求。
第一种方法:先处理掉那些占用连接但是不工作的线程。
max_connections的计算,不是看谁再running,是只要连着就占用一个计数位置。对于那些不需要保持的连接,我们可以通过kill connection + 线程id 主动踢掉。这个行为跟事先设置wait——timeout的效果是一样的。设置wait——timeout参数表示的是,一个线程空闲wait——timeout这么多秒之后,就会被MYSQL直接断开连接。
第二种方法:减少连接过程的消耗。
有的业务代码会在短时间内先大量申请数据库连接做备用,如果现在数据库确认是被连接行为打挂了,那么一种可能的做法,是让数据库跳过权限验证阶段。
跳过权限验证的方式是:重启数据库,并使用-skip-grant-tables参数启动。这样,整个MYSQL会跳过所有的权限验证阶段,包括连接过程和语句执行过程在内(风险极高)。
在MySQL 8.0版本里,如果你启用-skip-grant-tables参数,MySQL会默认把–skip-networking参数打开,表示这时候数据库只能被本地的客户端连接。可见,MySQL官方对-skip-grant-tables参数的安全问题也很重视。
慢查询性能问题
MySQL中会引发性能问题的慢查询大体有三种可能:
1.索引没有设计好;
2.SQL语句没写好;
3.MySQL选错了索引。
原文:https://blog.csdn.net/weixin_43770941/article/details/94736103