Mysql最大连接数设置
MySQL性能优化之max_connections配置参数浅析
什么是max_connections
max_connections是MySQL数据库中的一个配置参数,用于设置同时连接到MySQL服务器的最大客户端数量。一旦超过这个数量,新的客户端连接将无法被接受并返回错误信息。
如何设置max_connections
方法一:
可以通过
1 | set GLOBAL max_connections=100; |
命令将最大连接数设置为100,此方法是即时生效的,不需要重启mysql服务。
需注意的是,要通过root权限的mysql帐号才能操作,否则会报“1227 - Access denied; you need (at least one of) the SUPER
privilege(s) for this operation”的错误。
同时,设置max_connections最小值为1。
方法二
在MySQL配置文件my.cnf中,可以通过以下配置来设置max_connections参数的值:
1 | [mysqld] |
上述例子将max_connections参数的值设为100。
如何确定max_connections的最佳值
max_connections的值设置得过低会导致连接被拒绝的错误,设置得过高会导致系统资源紧张和性能下降。
一般来说,max_connections的适当值可以通过以下公式计算:
1 | max_connections=(Available RAM - Global Buffers - Other Programs RAM) / per-connection_buffers |
其中,Available RAM指可用的内存,Global Buffers指MySQL服务器缓存的内存,Other Programs RAM
指其他程序正在使用的内存,per-connection_buffers指每个连接需要使用的缓存大小。
示例1:计算max_connections的最佳值
MySQL 终端中使用类似于此 **SHOW VARIABLES LIKE '%buffer%';** 的查询找到了相关变量。
具体变量内容:
计算公式:
1 | max_connections = (Available RAM – Global Buffers) / Thread Buffers |
Available RAM = 8201199616
| Global Buffers | Size | Thread Buffers | Size |
|---|---|---|---|
| key_buffer_size | 8388608 | sort_buffer_size | |
| innodb_buffer_pool_size | 134217728 | myisam_sort_buffer_size | |
| innodb_log_buffer_size | 16777216 | read_buffer_size | |
| innodb_additional_mem_pool_size | 8388608(默认值) | join_buffer_size | |
| net_buffer_size | read_rnd_buffer_size | ||
| query_cache_size | thread_stack |
示例2:优化max_connections性能
可以通过以下方法进一步优化max_connections的性能:
1. 调整MySQL服务的最大打开文件数
1 | [mysqld] |
上述例子将MySQL服务的最大打开文件数设为65535。
2. 使用连接池
可以使用连接池来重复使用现有的数据库连接,减少创建和销毁连接的开销。
可以使用第三方的连接池工具,如C3P0、Druid等。
MySQL 连接相关变量的含义
**max_connections:**MySQL 允许的最大并发连接数。默认值通常为 151。超过此限制的连接请求将被拒绝。
max_user_connections:每个用户允许的最大连接数。默认情况下,此限制没有被强制执行,允许用户使用 max_connections
的最大值。可以通过设置来强制限制用户的连接数。
threads_connected:当前已经建立的连接数。该变量表示当前活动的连接数,包括客户端和内部线程。
threads_running:当前正在运行的线程数。这包括正在执行查询或其他操作的线程。
wait_timeout:客户端连接在未活动一段时间后被关闭之前的等待时间。默认值为 28800 秒(8 小时)。如果连接在该时间段内没有活动,则服务器将自动断开连接。
interactive_timeout:与 wait_timeout 类似,但仅适用于交互式连接。如果连接被标记为交互式,则会使用此值来确定在未活动一段时间后关闭连接之前的等待时间。
connect_timeout:客户端连接到服务器时的超时时间。如果连接尝试在此时间内未能成功建立,则会超时。
**back_log:**MySQL 服务器允许等待连接的请求队列的最大长度。当所有连接数已用完时,新的连接请求将进入等待队列。默认值通常为
50。
**max_connect_errors:**在服务器拒绝客户端连接之前允许的最大错误连接数。如果客户端尝试建立连接的次数超过此限制,则服务器将拒绝进一步的连接请求。
max_allowed_packet:允许的最大数据包大小。这适用于发送给服务器的单个查询或响应的大小限制。
**net_read_timeout:**从网络中读取数据时的超时时间。如果在此时间内没有接收到新数据,则连接可能会被关闭。
**net_write_timeout:**向网络写入数据时的超时时间。如果在此时间内无法发送数据,则连接可能会被关闭。




