日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2025/3/15 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:戴岳兵

MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客戶端中用來設(shè)置讀取超時時間的參數(shù)。在 MySQL 的官方文檔中,該參數(shù)的描述是這樣的:

  • 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.

也就是說在需要的時候,實際的超時時間會是設(shè)定值的 3 倍。但是實際測試后發(fā)現(xiàn)實際的超時時間和設(shè)置的超時時間一致。

而具體什么時候發(fā)生三倍超時,在文檔中沒有找到。所以對 MySQL 5.7.20 的源碼進行了一些分析。

使用 GDB 調(diào)試代碼找了實際與 mysql server 通信的代碼,如下:

其中 vio_read() 函數(shù)中,使用 recv 和 poll 來讀取報文和做讀取超時。net_should_retry() 函數(shù)只有在發(fā)生 EINTR 時才會返回 true。從這段代碼來看是符合測試結(jié)果的,并沒有對讀取進行三次重試。只有在讀取操作被系統(tǒng)中斷打斷時才會重試,但是這個重試并沒有次數(shù)限制。

從上面代碼的分析可以看出,代碼的邏輯和文檔的描述不符。于是在一頓搜索后,找到了一個 MySQL 的 BUG(Bug #31163)。該 BUG 報告了在 MySQL 5.0 中,MySQL c api 讀取的實際超時時間是設(shè)置的三倍,與現(xiàn)有文檔描述相符。于是對 MySQL 5.0.96 的代碼又進行分析。

同樣使用 GDB 找到了通信部分的代碼。這次找到了重試三次的代碼,如下:

這個版本的 MySQL api 的讀寫超時是直接使用的 setsockopt 設(shè)置的。第一次循環(huán),在 A 點發(fā)生了第一次超時(雖然注釋寫的非阻塞,但是客戶端的連接始終是阻塞模式的)。然后在 B 點將該 socket 設(shè)置為阻塞模式,C 點這里重置 retry 次數(shù)。由于設(shè)置了 alarm 第二次以后的循環(huán)會直接進入 D 點的這個分支,并且判斷循環(huán)次數(shù)。作為客戶端時 net->retry_count 始終是 1,所以重試了兩次,共計進行了 3 次 vioread 后從 E 點退出函數(shù)。

由上面的分析可知,MySQL 文檔對于該參數(shù)的描述已經(jīng)過時,現(xiàn)在的 MYSQL_OPT_READ_TIMEOUT 并不會出現(xiàn)三倍超時的問題。而 Bug #31163 中的處理結(jié)果也是將文檔中該參數(shù)的描述更新為實際讀取超時時間是設(shè)定時間的三倍。也許是 MySQL 的維護者們在后續(xù)版本更新時忘記更新文檔吧。

總結(jié)

以上是生活随笔為你收集整理的socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。