在运维过程中用,有可能会遇到连接数不足的情况,一般会报”Too many connections”的错误。
分享一下实际项目中的简单的经验:
实际环境MySQL5.7版本中的连接状态查看:
-
mysql> show variables like '%max_connections%';
-
-
+-----------------+-------+
-
-
| Variable_name | Value |
-
-
+-----------------+-------+
-
-
| max_connections | 151 |
-
-
+-----------------+-------+
-
-
1 row in set (0.00 sec)
执行结果参数解释:
1、简练解释:
Thread_cached:被缓存的线程的个数
Thread_running:处于激活状态的线程的个数
Thread_connected:当前连接的线程的个数
Thread_created:总共被创建的线程的个数
2、细节补充:
Threads_running :这个数值指的是激活的连接数,这个数值一般远低于connected数值.相当于实际的并发数。
Threads_connected: 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数。
Theads_cached: mysql建立连接非常消耗资源,当已有连接不再使用之后,mysql server不是直接断开连接,而是将已有连接转入到thread_cache中,以便下次在有create thread的需求时,可以在cache中复用,提高性能,降低资源消耗。当然,如果已经有了中间件或者其他的连接池管理,那么这个参数就没有那么重要了,但是如果没有其他的连接池管理,那么优化这个参数还是可以得到不错的回报的。
参数调整之前查看当前数据库设置的最大连接数:
-
mysql> show variables like '%max_connections%';
-
-
-
+-----------------+-------+
-
-
-
| Variable_name | Value |
-
-
-
+-----------------+-------+
-
-
-
| max_connections | 151 |
-
-
-
+-----------------+-------+
-
-
-
1 row in set (0.00 sec)
设置最大连接数是实时生效的,同时也是临时的,会随着重启数据库而恢复到my.cnf所指定的值:
-
mysql> set GLOBAL max_connections=10000;
-
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql> show variables like '%max_connections%';
-
-
+-----------------+-------+
-
-
-
| Variable_name | Value |
-
-
-
+-----------------+-------+
-
-
-
| max_connections | 10000 |
-
-
-
+-----------------+-------+
-
-
-
1 row in set (0.00 sec)
要是想永久保持着设置的值,可以在配置文件中声明,这样即使是重启也不会影响参数值:
修改mysql配置文件my.cnf,在[mysqld]段中添加或修改max_connections值:
max_connections=10000
重启mysql服务后也会永久生效。
总体来说,该参数在服务器资源够用的情况下应该尽量设置大,以满足多个客户端同时连接的需求。否则将会出现类似”Too many connections”的错误。
阅读(2407) | 评论(0) | 转发(0) |