当前位置: 首页 > news >正文

54 mysql 中各种 timeout - connect/wait/interactive/read/write_timeout

前言

在 mysql 的服务器配置中, 我们经常会使用到几个 timeout

诸如 connect_timeout, wait_timeout, interactive_timeout, read_timeout, write_timeout 等等 

我们 这里来看一下 他们的具体的使用场景, 以及具体控制的相关信息 是什么

 

 

connect_timeout

这个是 客户端 和 服务器建立连接之后, 客户端需要向服务器发起认证请求 

如果在 connect_timeout 期限内, 客户端未发送认证请求, 服务器会断开 和 客户端的连接

a2c3d543349d522fae99892557bf2be7.png

 

客户端和服务器这边新建了连接之后, 需要登录, 登录的时候设置了 socket 的读写超时时间为 connect_timeout

d595db238e97b6ac03f258b9a2f5b0df.png 

登录之后, 如果是登录成功 

将 socket 的读写超时时间更新为 net_read_timeout, net_write_timeout

 

 

wait_timeout/interactive_timeout

这两个超时时间, 控制的是 一个连接 如果超过多久, 没有交互了, mysql 这边可以关闭这个连接了 

从描述上面看, 二者基本上是一样的, 从业务控制上面看, interactive_timeout 被转换为了 wait_timeout

f60be9149c4404125a197130c1f27f63.png

0847d3624d08795a74f38a9aabbdcac8.png 

这里是 登录校验 的时候, 将 interactive_timeout 转换为了 wait_timeout

eccb6ffa41bda723ed38c934da11cdfc.png 

 

这里是具体使用到的地方, “thd->get_protocol()->get_command” 是轮询 socket, 查看客户端是否有请求数据过来

因此 在轮询之前, 将 socket 的超时时间更新为了 wait_timeout

当前连接, 如果是超过了 wait_timeout 没有活跃, 则 超时, 然后 外层 handle_connection 的循环, 走 end_connection, close_connection 的相关流程 

bda6fc74b93a6956e35de85db9c439cd.png

 

 

read_timeout/write_timeout

这两个主要控制的就是 服务器这边从客户端读取数据, 和 服务器往客户端写出数据 的超时时间控制了

这两个系统变量 描述信息如下

22df479ecbf4f78d54bd372f5c979505.png

15ebae46af314ac3d71f5db8339af8a1.png 

read_timeout 的这边使用如下, 在处理客户端请求之前, 将 socket 的读取超时时间更新为 read_timeout

如果是 服务器这边读取客户端的请求数据, 超过了 read_timeout, 则超时 

ece1a7e1d9cf20d9b22167693d251d4a.png

 

write_timeout 的这边配置是在 登录连接之后, 将 socket 的写出超时时间更新为了 write_timeout

然后 后面的, 请求处理等等相关, 均是基于这个 write_timeout 的配置 

01603963fb27fa4cf26428d469882e76.png

 

 

read_timeout 的整体更新流程

这个是在 创建连接, 处理业务, 关闭连接 的几个阶段的 socket 读取超时 时间的更新的一个大致的情况

初始化的时候, 使用全局变量的 read_timeout 进行初始化 读取超时时间

eaf7e9d18eb96d51e9809bf273a6783e.png

 

然后是 登录的使用, 使用 connect_timeout 来更新 socket 的读取超时时间 

4b5a7c7bf7c7233a218f17ff9e34c445.png 

然后是 登录验证之后, 将 socket 的读取超时时间更新为了 read_timeout

987c98b739b024bdace453e0c0b5ad5a.png 

然后是 轮询客户端请求之前, 将 socket 的超时时间 更新为了 wait_timeout

0f2667e95101fad615e1595701daa549.png 

然后是处理客户端请求之前, 将 socket 的读取超时时间更新为了 read_timeout

bda9fa84d4e5cb34c806954f8a0bc72a.png 

之后是随着连接的 生命周期的业务处理, 在等待客户端请求信息之前将 socket 的读取超时时间更新为 wait_timeout, 在处理客户端的请求信息之前将 socket 的读取超时时间更新为 read_timeout

 

 

write_timeout 的整体更新流程 

这个是在 创建连接, 处理业务, 关闭连接 的几个阶段的 socket 写出超时 时间的更新的一个大致的情况

初始化的时候, 使用全局变量的 write_timeout 进行初始化 写出超时时间

1b4baccf319f03b1bac52b7fd603c3a6.png

 

然后是 登录的使用, 使用 connect_timeout 来更新 socket 的读取写出时间 

06d68a9d9ac36c384bdc9dc6d6dc9407.png 

然后是 登录验证之后, 将 socket 的读取超时时间更新为了 write_timeout

563640c5b1623d8db674942d1fa8a60d.png 

然后在之后连接的生命周期中, socket 的写出超时时间, 一直是 write_timeout

 

 

完 

 

 

 

http://www.lryc.cn/news/437124.html

相关文章:

  • 实战案例(5)防火墙通过跨三层MAC识别功能控制三层核心下面的终端
  • 【智能流体力学】数值模拟中的稳态和瞬态
  • Vue-Route4 ts
  • sizeof和strlen的小知识
  • Java项目: 基于SpringBoot+mybatis+maven宠物咖啡馆平台(含源码+数据库+毕业论文)
  • 戴尔14代服务器配置IDRAC9远程配置说明
  • 如何让你家里的电脑连接公司的远程桌面
  • 软件:分享8个常用视频剪辑免费软件,你都用过吗?
  • TS 常用类型
  • 半导体芯闻--20240913
  • C盘空间不足如何解决?解决C盘空间不足的7个方法
  • 比 GPT-4 便宜 187 倍的Mistral 7B (非广告)
  • FFmpeg与OpenCV联合开发
  • Docker 部署 Redis (图文并茂超详细)
  • Docker基础-Docker Compose使用
  • GPT撰写开题报告教程——课题确定及文献调研
  • SprinBoot+Vue高校就业管理系统的设计与实现
  • 【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)
  • 判断当前用户登录时常是否超过两个小时
  • nacos明明配置了远程连接地址却一直连接本地的详细配置解释
  • Superset二次开发之源码 run-server.sh 分析
  • Java 之四种内部类详解
  • 03:手动可变电阻
  • 嵌入式Linux电池管理(TODO)
  • Python 求亲和数
  • 【C++】——vector模拟实现和迭代器失效问题
  • USB 3.1 标准 A 型连接器及其引脚分配
  • 机器学习文献|基于循环细胞因子特征,通过机器学习算法预测NSCLC免疫治疗结局
  • Qt 实现自定义截图工具
  • 第15-05章:获取运行时类的完整结构