当我们的数据库服务器遇到如下的错误:ERROR: Too many connections

一种可能性就是我们的压力确实很大,需要增加服务器硬件资源或者增加数据库服务器。但是大多数情况下是我们的连接数配置不合理造成的。

在MySQL中,有如下几个参数是和连接数配置相关的:

Max_connections

Max_used_connections

Connections

Max_user_connections

Back_log

Max_connect_errors

接下来我们逐一来分析这些参数的意义:

Max_connections:

是指整个数据库服务器所允许的最大连接数,可使用以下命令进行查询:

Show variables like ‘max_connections’;

在Windows平台该数值一般默认为151,如果超过该数值,由于限制那么系统就会产生等待的情况,从而影响系统的并发量和吞吐量。

通常情况下,我们会根据服务器的性能适当的调整一个合适的值,比如500-800,但是要注意该数值的最大值为16384,请不要超过这个值。

由于数据库会为每个连接,分配一定内存资源和缓冲区,通常为每个连接分配256KB资源,所以设置要慎重一些,建议不要超过实际用户的1.5倍。

在我们评估最大连接数数值的时候,我们可以使用以下的一些命令,来查看一下历史数据,提供参考数据:

Show global status like ‘max_used_connection’;

这个命令用于查询,服务器自启动以来运行期间的最大连接数。

show global status like 'Connections';

这个命令可以查询服务器自启动以来的连接数的总数,这是一个累计值,可以查看数据库连接的频率。

通过检测这些数据,我们就能得到是否需要增加Max_connections的证据。

如果max_used_connections 已经等于或者接近Max_connections,那么我们就需要增加数据库的最大值。

按照通用的20/80法则,我们建议留有20%的连接数用于系统备用,即Max_used_connections/Max_connections *100% < 80%。

按照经验,我们会留比较大的连接数,比如留50%的连接数用于备用。

Max_user_connections

是指对每个用户允许的最大连接数。

一般情况下我们都会让其保持默认值,除非有特定的需要或者临时性的用户,我们才做出限制。

该参数会限制单个用户的最大连接值,通常是对单用户并发用户进行限制。

Back_log

show variables like 'back_log';

该参数是用来缓存用户连接的,相当于一个排队的连接池。

在数据库达到最大连接数的时候,新的连接请求会被存放在堆栈中,并等待其他连接释放资源。

如果等待的连接数超过这个值,那么新的连接将不会被接受。

这个数值不能超过系统的TCP/IP连接的监听队列数,否则无效。

Linux系统我们推荐设置为小于512的整数。

注意每个队列会消耗256kb的内存资源。

Max_connect_errors

show variables like 'max_connect_errors';

该参数是指,当连接的错误数达到这个阈值的时候,系统会终止用户的连接服务。

需要使用flush hosts来清除错误,否则就会报错:

Host *** is blocked because of many connection errors.Unblock with ‘mysqladmin flush-hosts’.

当数据库达到这个阈值的时候,数据库认定系统出现了一个错误,并且会阻止该用户后续的请求操作,除非使用命令刷新系统。

如果是内网环境,建议可以将数值设置的高一点,并使用任务机制定期刷新hosts。

Connect_timeout

show variables like '%connect_timeout%';

指定MySQL服务等待应答的时间,如果超时那么客户端会返回一个错误,bad handshake。

在Windows环境下默认值为10秒。

如果是局域网或者高并发的环境下,可以适当提高该数值,比如15-20 秒,以避免出现连接错误。

建议该数值要结合thread_cache_size建议适当提高该数值,以便提高更多的连接数。

Skip_name_resolve

show variables like '%skip_name_resolve%';

该设置是用于提高数据库服务器的连接速度。

MySQL在获得连接请求的时候,会根据请求中的IP地址,来反向查询服务器的主机名,然后再次获取该服务器的IP地址。

如果两次获取的IP地址一致,那么才会建立连接。

按照这种设计,一次连接会耗费较长的时间,主要是一种安全上的验证。

但是我们不推荐在广域网环境下,打开这个设置,以防止黑客的攻击。

MySQL 连接数相关参数设置的更多相关文章

  1. 树莓派3 之 启动显示和wifi相关参数设置

    最近将树莓派操作系统重新安装了,然后发现了一些问题.这里分享出来给大家 问题一:连接外置显示器黑屏 解决方法:将SD卡 插入电脑,在电脑中找到SD卡 修改其中的config.txt文件 #强制使用HD ...

  2. MySQL复制相关参数详解

    MySQL复制相关参数详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.复制相关系统变量 1>.server_id 是必须设置在master和每个slave上的唯一标 ...

  3. 了解java虚拟机—JVM相关参数设置(2)

    1.   JVM相关参数设置 JVM相关配置 -XX:+PrintGC 两次次YoungGC,两次FullGC. -XX:+PrintGCDetails 打印GC时的内存,并且在程序结束时打印堆内存使 ...

  4. 关于mysql的wait_timeout参数 设置不生效的问题【转】

    关于wait_timeout 有一次去online set wait_timeout 的时候发现改了不生效,如下: mysql> show variables like 'wait_timeou ...

  5. MYSQL连接相关参数和状态值详解

    针对mysql的连接参数和状态值,本文做些介绍和对比 一.MYSQL连接参数变量 1.常用连接数限制参数 show variables like '%connect%'; | max_connect_ ...

  6. MySQL——my.cnf参数设置说明

    以下为个人总结的MySQL配置文件参数说明,如有错误,烦请大佬们留言指正,本人将第一时间修改.2019-12-10 12:32:08 [mysqld] server- # Mysql唯一标识,一个集群 ...

  7. MySQL 主从复制相关参数

    列举了MySQL主从复制主要的相关参数 binlog server_id 服务器在集群中唯一标识符 log_bin[=binlog_name] 启动二进制日志 log_bin_index 二进制日志索 ...

  8. MySQL服务优化参数设置参考

    l 通用类: key_buffer_size 含义:用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写). 影响:对于MyISAM表的影响不是很大,MyISAM会使用系统的缓存来存储 ...

  9. pycharm启动慢 –xms -xmx相关参数设置

    Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...

随机推荐

  1. PHP-问题处理验证码无法显示出来

    1.问题 今天重新安装了ubuntu,PHP,MySQL,Apache,到测试CMS项目时发生一个错误: 验证码无法显示出来. 2.解决: 2.1 使用 phpinfo检查: phpinfo(); 在 ...

  2. python3 + flask + sqlalchemy +orm(1):链接mysql 数据库

    1.pycharm中新建一个flask项目 2.按装flask.PyMySQL.flask-sqlalchemy 3.项目下面新建一个config.py 文件 DEBUG = True #dialec ...

  3. 文档大师 在Win10 IE11下,文档集画面无法正常显示Word等Office文档的解决方法

    在文档集界面中显示Word文档,是文档大师的一个核心功能. 最近在 Win10 升级到最新版后,发现 无法正常显示Office 文档的问题. 一开始以为是Word版本问题,从2007升级到2016,问 ...

  4. ssh远程登录不上的处理

    最近ssh远程主机突然登录不上,提示如下: 后来咨询了一下云主机的客服,估计我们的主机时多次尝试密码错误被系统屏蔽IP了.于是问了一下同事,确实有同事最近密码错误多次尝试的问题. 于是按照客服给的方法 ...

  5. 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其二)

    上一篇说到的嵌套Json带有斜杠的问题,如下图: 上一篇中用反射C#类的方法,在序列化Json阶段实现了去掉斜杠,现在还有一种相对更简单的方法,就是在反序列化阶段,读取Json时通过字符串的操作,把这 ...

  6. YAML文件格式_k8s/docker-compose配置文件

    YAML(Yet Another Markup Language),是一个JSON的超集,意味着任何有效JSON文件也都是一个YAML文件.它规则如下: )大小写敏感 )使用缩进表示层级关系,但不支持 ...

  7. Python中的三元运算符

    Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...

  8. Android中使用BufferedReader.readline阻塞读取不到数据,但是ready返回true

    通过socket测试工具在电脑上发送消息,Android真机可以收到响应BufferedReader.ready()返回true,但是readline却一直阻塞. 原因:readline()只有在遇到 ...

  9. AES和RSA加解密的Python用法

    AES AES 是一种对称加密算法,用key对一段text加密,则用同一个key对密文解密, from Crypto import Random from Crypto.Hash import SHA ...

  10. 【hbase】Unable to read additional data from client sessionid 0x15c92bd1fca0003, likely client has closed socket

    启动hbase ,验证出错 Master is initializing 查看zk日志,发现Unable to read additional data from client sessionid 0 ...