socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析

作者:戴岳兵

MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客户端中用来设置读取超时时间的参数。在 MySQL 的官方文档中,该参数的描述是这样的:

  • MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.

也就是说在需要的时候,实际的超时时间会是设定值的 3 倍。但是实际测试后发现实际的超时时间和设置的超时时间一致。

而具体什么时候发生三倍超时,在文档中没有找到。所以对 MySQL 5.7.20 的源码进行了一些分析。

使用 GDB 调试代码找了实际与 mysql server 通信的代码,如下:

b52b917aadc33fb3c2fee819e9a0cacf.png

其中 vio_read() 函数中,使用 recv 和 poll 来读取报文和做读取超时。net_should_retry() 函数只有在发生 EINTR 时才会返回 true。从这段代码来看是符合测试结果的,并没有对读取进行三次重试。只有在读取操作被系统中断打断时才会重试,但是这个重试并没有次数限制。

从上面代码的分析可以看出,代码的逻辑和文档的描述不符。于是在一顿搜索后,找到了一个 MySQL 的 BUG(Bug #31163)。该 BUG 报告了在 MySQL 5.0 中,MySQL c api 读取的实际超时时间是设置的三倍,与现有文档描述相符。于是对 MySQL 5.0.96 的代码又进行分析。

同样使用 GDB 找到了通信部分的代码。这次找到了重试三次的代码,如下:

76432721c69e8b7167942a7ff77445d4.png

这个版本的 MySQL api 的读写超时是直接使用的 setsockopt 设置的。第一次循环,在 A 点发生了第一次超时(虽然注释写的非阻塞,但是客户端的连接始终是阻塞模式的)。然后在 B 点将该 socket 设置为阻塞模式,C 点这里重置 retry 次数。由于设置了 alarm 第二次以后的循环会直接进入 D 点的这个分支,并且判断循环次数。作为客户端时 net->retry_count 始终是 1,所以重试了两次,共计进行了 3 次 vioread 后从 E 点退出函数。

由上面的分析可知,MySQL 文档对于该参数的描述已经过时,现在的 MYSQL_OPT_READ_TIMEOUT 并不会出现三倍超时的问题。而 Bug #31163 中的处理结果也是将文档中该参数的描述更新为实际读取超时时间是设定时间的三倍。也许是 MySQL 的维护者们在后续版本更新时忘记更新文档吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python操作文件,报FileNotFoundError: [Error 2] No such file or directory错误

python操作文件时,报No such file or directory错误。 多次检查目录、文件名、语法都是对的。 折腾一番后,打开文件所在文件夹,并显示所有文件后缀名,才发现此文件并没有txt后缀名 解决方法: 添加文件的.txt后缀名&a…

练习ddt-file_data时,报错UnboundLocalError local variable ‘value‘ referenced before assignment

错误原因就是,在xx.yml中的内容无效 更改之前: 更改之后: 注意冒号后面要有空格 改完之后运行就能正确读取到了

卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

在自动驾驶、医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情。卷积神经网络可能是这一巨大成功背后的关键组成模块。这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工作原理的理解。简介过去我们接触到了密…

负载均衡策略_常见的负载均衡策略

轮询(Round Robin): 这种方法就会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量以及敷在相同的应用程序。如果所有的服务有相同或者相近的性能那么选择…

白盒测试-修正条件判定覆盖

当程序中的判定语句包含多个条件时,运用多条件覆盖方法进行测试,其条件取值组合数目是非常大的。 修正条件判定覆盖要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且…

springboot整合shiro_Springboot整合Shiro:简洁的身份认证

简单的web应用进行身份认证的流程:1.对未认证的用户请求进行拦截,跳转到认证页面。2.用户通过用户名密码及其他凭证进行身份认证,认证成功跳转成功页面,认证失败提示相关失败信息。根据流程,采用shiro进行快速开发。1.…

2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】考试及安全生产监管人员模拟考试题库,包含安全生产监管人员考试答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲…

PICT工具安装使用

1、安装PICT 通过下载安装包pict33.msi, 链接:https://pan.baidu.com/s/1YWIA5XLNI0MMFkiQ-EqZ9w 提取码:ho7g 解压安装,安装成功后验证:打开cmd命令终端,输入pict显示如下即证明安装成功。 2、新建Mod…

茜在人名可以读xi吗_甘肃中专学校:初中毕业可以读大专吗?

初中毕业到兰州中专学校可以读大专吗?许多学生因为成绩的关系可能没能上普通高中,但是他们现在还不具备任何的专业知识和能力进入社会。很多孩子都想通过读大专具备进入社会的能力,那么初中毕业的学生是否能够读大专呢?成人高考初中毕业之后是可以读大…

sql backup database备份d盘_SQL数据库备份概述

数据库备份方式概述为了防止意外删除,自然灾害等造成的损失,数据库备份是必须要的。数据库备份还可以用于mirror,replication等过程。了解数据库备份的原理对于处理数据库备份尤为重要。以下关于备份的概述只是前段时间兴起而写,由…

选择嵌套_如何优雅地在JavaScript中访问嵌套对象

在JavaScript中访问嵌套对象以超酷的方式安全地访问JavaScript中的嵌套对象JavaScript是惊人的,我们都知道。但是JavaScript中的一些东西真的很奇怪,它们让我们大开眼界。其中一个问题是当您尝试访问嵌套对象时与此错误的对抗,无法读取未定义…

迭代器 java_百战程序员:Java设计模式之迭代器模式

迭代器是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作也放在集合对象中,但这样的话,集合对象就承担太多的责任了&…

postman-常见问题解决方案记录

1、 Response body:Containing string为中文 Response body:Containing string:为中文时,转换为unicode编码,并添加转义符。 2、get方式与post请求使用环境变量 post方式请求,请求体中包含有环境变量,引用方法: JSON格…

批发电脑配件_2019年10月电脑配件表

当前电脑主要配件的批发价,不面向零售哦!下面给大家介绍一下想获得详细报价,持续为您更新想了解电脑系统重装请回复:重装系统电脑由于windows10更新卡顿请回复:windows 10笔记本电脑购买常识请回复:笔记本电…

uniapp光标自动定义到文本框_word如何自动生成毕业论文目录!

一篇word文档,内容有大的章,小的节。如何把章节抽出来生成目录?WORD →点击需要插入的地方 → 插入菜单 → 索引和目录 → 目录 → 确定目录通常是长文档不可缺少的部分,有了目录,用户就能很容易地知道文档中有什么内容…

计算机基础word-常见问题

问题1:艺术字样式不一致,为: 不是原来的: 解决方案:将原来word 文件-另存为-保存类型为:Word97-2003文档,重新打开即可。 问题2:word分栏 第一栏没满,第二栏有内容。 解…

d3.js 旋转图形_MATLAB 的图形处理

一基本绘图函数1. 平面曲线绘图plot(Y) 如Y是实向量,则绘出横坐标值为序号,纵坐标值为Y的曲线,如Y是虚数,则横坐标值为Y的实部,纵坐标为Y的虚部的曲线,点与点之间用线段相连。如果Y是矩阵,则画出…

顺序查找-判断质数/记录出现次数

描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现…

iphone录屏没内部声音_安卓手机如何录屏?手机高清录屏指南

安卓手机如何录屏?师兄最近迷上了玩输出,输出战绩可以说是可圈可点。有时候想要炫耀下自己的战况,操作的时候截屏不方便。部分小伙伴的手机截图过后还需要编辑或者左滑图片,图片也不能展示自己优秀的操作!其实录屏的方…

表变量是什么_DAX学习:使用VAR定义变量

前面介绍如何使用DAX生成日期表的时候,使用了VAR,有人留言问这个VAR怎么理解,那么这篇文章就来介绍VAR以及它的用法。VAR是VARIABLE的缩写,意思为变量,任何一个编程语言中,变量都是一个非常重要的基础概念,…