大家一起探讨一下mysql连接释放的那点儿事儿

阳光草丛下的兔子 2011-03-11 09:45:37
由于和这位仁兄的问题一样,我就不打字了!偷懒了,嘿嘿。关键在于解决问题,大家一起讨论讨论吧
关于MySQL优化----wait_timeout和interactive_timeout的设置问题的疑惑

MySQL中的配置参数interactive_timeout和wait_timeout

测试操作系统:Red Flag Desktop 6.0 SP1
Linux核心版本:2.6.23.1-4
测试数据库版本:mysql 5.1.35

(1)interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)

(2)wait_timeout:
参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)

MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。

问题:
如果在配置文件my.cnf中只设置参数wait_timeout=100,则重启服务器后进入,执行:
Mysql> show variables like “%timeout%”;
会发现参数设置并未生效,仍然为28800(即默认的8个小时)。
查询资料后,要同时设置interactive_timeout和wait_timeout才会生效。
【mysqld】
Wait_timeout=100
Interactive_timeout=100
重启MySQL Server进入后,查看设置已经生效。


问题1:这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?

问题2:interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?

问题3:在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短。如果在进行连接配置时mysql_real_connect()最后一个参数 client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖 wait_timeout?

问题4:为了减少长连接的数量,在设置优化时是不是可以将interactive_timeout的值设置的大些,而wait_timeout的值设置的小些?但是问题2的描述好像又不允许这样。。。
问题5:这两个参数设置为多大为好?


不知道各位同学有没有研究过这个参数配置的,望不吝赐教~~~
...全文
534 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
无天 2011-03-13
  • 打赏
  • 举报
回复
暂时还没修改过这个参数。
  • 打赏
  • 举报
回复
其它人还有什么看法,大家发发言啊!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]

引用在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

参数默认值:28800秒(8小时)


这个主要看具体的应用,在看到的实际应用中,对这个倒是很少有限制。 除非是有很多用户用命令行工具……
[/Quote]
你好,能加个QQ谈下不。。
ACMAIN_CHM 2011-03-11
  • 打赏
  • 举报
回复
[Quote]在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

参数默认值:28800秒(8小时)


[/Quote]这个主要看具体的应用,在看到的实际应用中,对这个倒是很少有限制。 除非是有很多用户用命令行工具直接连在MYSQL上,不做事情也不退出,这种情况下设置小一点的timeout:或许可以防止这些空闲连接占用过多资源。

对于实际开发的应用 来说,CS结构,则应该在程序端做好,如果非实时性要求很高的应用,则程序开发者在使用完数据库后就应该释放连接。 如果是实时性高的,则需要保持连接,那样从MYSQL端也不应该去主动断开连接。

BS结构,如果不采用连接池,则仅在页面生成的时候去访问数据库打开连接,使用完后自然释放。 而如果使用了连接池,则MYSQL端同样不应该主动断开连接。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]

手册的描述已经比较清楚了。

引用wait_timeout

The number of seconds the server waits for activity on a noninteractive connection before closing it. This timeout applies only to TCP/IP and Unix socket file conn……
[/Quote]
不知各位这个参数一般都是设置为多少呢?感觉默认的8个小时时间太长了点。。。。这么长时间,有的时候会有点浪费了数据库的连接资源,如果网站并发高的话,有可能会导致数据库连接被用完的!当然,已经用到了C3P0连接池,但是个人感觉单让C3P0一个人来解决并发量大时数据库的连接释放,有时会力不从心啊
ACMAIN_CHM 2011-03-11
  • 打赏
  • 举报
回复
手册的描述已经比较清楚了。

[Quote]wait_timeout

The number of seconds the server waits for activity on a noninteractive connection before closing it. This timeout applies only to TCP/IP and Unix socket file connections, not to connections made via named pipes, or shared memory.

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()). See also interactive_timeout. [/Quote]

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧