问题简述/现象及原因
一台MySQL服务器上,有多个数据库,由不同用户使用,相互之间没有或很少关联性。典型的实例是虚拟主机,或者有N多个小网站的某些低频企业应用。
这种环境下,难免有部分应用的质量不高:
出现效率极低的慢查询 -> 后续请求大量被locked排队 -> MySQL服务实时连接数达到最大连接数限制 -> 无法建立新连接
so, 所有相关应用全部挂掉
应对方案
为防止上述情况发生,要为MySQL配置max_user_connections参数。该参数作用是设置单个用户最大连接数限制。具体设置多少,要根据实际情况再裁定。
需要引起注意的是,这个参数是针对所有用户的限制,所以要考察正常情况下连接数最多的用户。可以使用下面语句实时查询各用户连接数。
select `USER`,COUNT(`USER`) AS CNT from information_schema.PROCESSLIST GROUP BY `USER` ORDER BY CNT DESC;
一个参考数值,将 max_user_connections 设置为正常情况下单用户最大连接数的3-5倍。
max_user_connections参数可以在MySQL运行时动态设置 set global .... 当然,也要同步写到my.ini配置参数里。
方案评估
max_user_connections 是个一刀切的配置参数,好像MySQL不能对每个用户设置连接数,并发查询数,io,cpu占用或其它什么什么的细粒度参数。或许并非一定有效。
与max_connections参数对比
max_connections 是指整个mysql服务器的最大连接数;
max_user_connections 是指每个MySQL用户的最大连接数
延伸阅读
- windows下安装zip压缩版的mysql服务器端v5.7.16(另MariaDB 10.4.10)
- phpmyadmin删除“追踪”(就是在表名旁的眼睛图标)/phpmyadmin(v3.3+)追踪功能简介
- 全球IP地址分配表_MySQL版_by_fengyqf100131_ip.sql.zip
- MySQL(csv,text)导入mssql方法参考
- mssql(microsoft sql server2005)数据导入mysql方法
- MySQL/phpmyadmin问题解决手记:#2002 - 服务器没有响应 (或者本地 MySQL 服务器的套接字没有正确配置)
- MySQL内置函数:IP地址点分式与数字转换函数(INET_ATON/INET_NTOA)
- mysqld 配置优化,请一定要加 skip-name-resolve,否则将被show processlist 里的 unauthenticated user 搞死
- mysql数据库还原出错ERROR:Unknown command '\\'解决手记
- windows下mysql自动定期备份并压缩/以discuz论坛为例