企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、超时配置 关于超时的参数,MySQL中有如下这些; ``` show global variables like '%timeout%' ``` ![](https://img.kancloud.cn/a9/e3/a9e36185c71ec01cb6a758e9254684e4_399x429.png) >[danger] 注意,这里的单位都是秒; 下面把重要的几个超时参数做说明; ## 二、connect_timeout 默认是10,单位秒; 在获取连接阶段(authenticate)起作用; 获取MySQL连接是多次握手的结果,除了用户名和密码的匹配校验外,还有IP->HOST->DNS->IP验证,任何一步都可能因为网络问题导致线程阻塞。为了防止线程浪费在不必要的校验等待上,耗时超过connect_timeout的连接请求将会被拒绝; ## 三、interactive_timeout & wait_timeout 两者的默认都是28800,单位秒,即8个小时; 它们都是在连接处于空闲阶段(Sleep)的时候起作用; 因为MySQL不能允许客户端一直占用连接,因此对于保持Sleep状态超过了wait_timeout(或interactive_timeout)的客户端(客户端软件或JDBC程序),MySQL会主动断开连接; ## **两者的区别是**: interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。 所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项;简单来说,人通过客户端连接数据库是交互式连接,程序通过jdbc连接数据库是非交互式连接; ## ***设置建议** 如果有大量Sleep连接,那么,建议把这个数值设置到比较小一点; 可以临时通过命令来修改该值: ``` set global wait_timeout=3600; ``` >[danger] 这样相当于是设置了全局变量,但是如果重启MySQL服务的话,这个值又会被初始化。如果想永久的变动此值的话,要在my.cnf的修改此值的大小,然后重启就会生效了; ## 四、net_read_timeout&net_write_timeout 即使连接没有处于Sleep状态,即客户端忙于计算或者存储数据,MySQL也选择了有条件的等待;在数据包的分发过程中,客户端可能来不及响应(发送、接收、或者处理数据包太慢);为了保证连接不被浪费在无尽的等待中,MySQL会选择有条件(超过net_read_timeout、net_write_timeout)的主动断开连接;