摘要:interactive_timeout和wait_timeout参数对sleep连接的影响
interactive_timeout
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)
官网文档:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_interactive_timeout
wait_timeout
参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)
官网文档:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_wait_timeout
sleep连接
参数含义:指processlist中Command类型为sleep的线程(线程正在等待客户端发送一个新的语句)
官网文档:https://dev.mysql.com/doc/refman/5.6/en/show-processlist.html
https://dev.mysql.com/doc/refman/5.6/en/thread-commands.html中介绍Sleep的含义是:The thread is waiting for the client to send a new statement to it.
max_connections
参数含义:最大允许客户端同时连接的数量。当客户端连接数超过该值的时候就会报错:Too many connections!
官网文档:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_connections
max_user_connections
参数含义:允许任何给定的MySQL用户帐户的最大并发连接数。默认的值为0,意味着“没有限制”。
官网文档:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_user_connections
以上参数对连接数的影响
MySQL所支持的最大连接数是有上限的,由参数max_connections控制。因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL处理完相应的操作后就断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报’too many connections’的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。
调整参数
调整前:
[root@mysql_43 ~]# lxsql 3306 variables 'timeout' +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 5 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 31536000 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | thread_pool_idle_timeout | 60 | | wait_timeout | 31536000 | +-----------------------------+----------+ [root@mysql_43 ~]# lxsql 3306 connect +-------------+---------+----------+ | USER | command | COUNT(*) | +-------------+---------+----------+ | rouser | Sleep | 124 | | system user | Connect | 2 | | root | Sleep | 1 | | root | Query | 1 | +-------------+---------+----------+
|
调整命令
mysql> set global interactive_timeout=600;set global wait_timeout=600; 记得修改配置文件:以防下次实例重启后恢复旧值 [root@mysql_43 ~]# sed -i 's/wait_timeout=31536000/wait_timeout=600/g;s/interactive_timeout=31536000/interactive_timeout=600/g' /opt/mysql/my.cnf [root@mysql_43 ~]# cat /opt/mysql/my.cnf|grep "timeout" wait_timeout=600 interactive_timeout=600
|
看看是否调整成功:
[root@mysql_43 ~]# xlsql 3306 variables 'timeout' +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 5 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 600 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | thread_pool_idle_timeout | 60 | | wait_timeout | 600 | +-----------------------------+----------+
|
过10分钟后,查看mysql的sleep连接有所降低:
[root@mysql_43 ~]# xlsql 3306 connect +-------------+---------+----------+ | USER | command | COUNT(*) | +-------------+---------+----------+ | rouser | Sleep | 106 | | system user | Connect | 2 | | root | Query | 1 | | rouser | Query | 1 | +-------------+---------+----------+ [root@mysql_43 ~]#
|