因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短。
问:为什么需要设置interactive_timeout wait_timeout 两个值?
因为如果数据库默认这两个变量的值是8小时(即28800秒)如果在8小时之内没有连接到数据库,等下次再连的时候就会抛连接超时,或连接关闭这样的异常。
在交互模式下,interactive-timeout取代wait-timeout 。如果客户端是交互模式连接的服务器,那么timeout就会受制于interactive-timeout。如果客户端是非交互模式,那么timeout受制于wait-timeout。是否交互模式连接,有客户端决定。
问题1:这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?
并不是没有生效,连接初始化的时候,wait_timeout会根据client的类型设置为global wait_timeout 或者interactive_timeout 值。你看到没生效因为你用命令行登陆进去就属于交互线程,自然被interactive_timeout 覆盖了。
问题2:interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?
1.在交互模式下(CLIENT_INTERACTIVE),interactive_timeout才生效,非交互模式下,不生效。
问题3:在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短。如果在进行连接配置时mysql_real_connect()最后一个参数client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖wait_timeout?
问题4:为了减少长连接的数量,在设置优化时是不是可以将interactive_timeout的值设置的大些,而wait_timeout的值设置的小些?但是问题2的描述好像又不允许这样。。。
客户端与服务器之间的交互:
Web 浏览器(客户端)中请求一个地址时,通过HTTP协议向服务器端发送一个请求(request),服务器端收到请求后,在Servlet中根据请求时的方法(method) 的设置get/post来响应doGet()/doPost()方法进行处理,由response对象得到PrintWriter输出流对象out,通过out.println ()将数据形成输出流。
处理请求之后Java编译器对Servlet进行编译, 得到Class可执行文件。Class文件由Java虚拟机 来解释执行,生成向客户端发送的应答,然后通过HTTP协议发送给客户端。通常返回客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。