当我们的数据库服务器遇到如下的错误: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. exception:Failed to execute 'toDataURL' on 'HTMLCanvasElement' 解决方案

      1.情景展示 当使用canvas 将图片转为base64报错信息如下: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLC ...

  2. [转]rsync命令中文文档

    原文链接 rsync是一个快速.多功能的远程(和本地)文件拷贝工具. 摘要 Local: rsync [OPTION...] SRC... [DEST] Access via remote shell ...

  3. java maven通过SMTP发送QQ邮件的完全步骤

    1.首先打开QQ邮箱的SMTP服务,因为QQ邮箱对于一般的用户都是默认关闭SMTP服务的. 找到SMTP服务的选项,可以看到此处默认是关闭的,点击开启,然后腾讯会进行一些身份验证,身份验证通过以后,腾 ...

  4. Atitit 最近资料文章列表r9 r8 月份 attilax总结

    Atitit 最近资料文章列表r9  r8 月份   attilax总结 atitit tag标签标示规范 attilax总结 v2 r922.docx 2017-09-28 02:04 阅读(27) ...

  5. Python的浮点数损失精度问题

    本篇讨论的现象可以从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print(x) 0.1 0. ...

  6. RDLC 根据条件改变背景颜色-多个IIF

    =IIf(Fields!DATE_DIFF.Value < 5 ,"White",IIf(Fields!DATE_DIFF.Value >=5 AND Fields!D ...

  7. C语言 · 空白格式化

    标题:空白格式化 “空白格式化”具体做法是:去掉所有首尾空白:中间的多个空白替换为一个空格.所谓空白指的是:空格.制表符.回车符. 填空为:*p_to<*p_from: #include< ...

  8. 禅道项目管理系统整合Selenium IDE的思路

    前两天说用过Selenium IDE产生了一些想法,这里做一些整理. 传统的测试人员管理测试用例,基本都是用Excel.这没什么不好的,也没什么好的.如果通过管理系统来管理用例,相对来说,少了一些简便 ...

  9. Linux常用的基础组件

    Linux服务器(新机器) yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf git yum  ...

  10. mongo连接拒绝10061原因

    首先检查Mongo是否启动: 启动 再次检查mongo配置文件是否允许其他人访问,默认路由是否加上 .进入mongodb安装目录的bin目录,新增mongodb.conf文件,输入 bind_ip=0 ...