亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

MySQL的MaxIdleConns不合理,會變成短連接的原因

瀏覽:3日期:2023-10-06 14:03:57
1 背景

最近石墨文檔線上業務出現了一些性能問題,在突發流量情況下,有個業務性能急劇下降。該服務是依賴于數據庫的業務,會批量獲取數據庫里的數據。在經過一系列的排查過程后,發現該服務到數據庫的連接數經常超過MaxIdleConns,因此懷疑是數據庫的配置導致的性能問題,所以以下針對數據庫的代碼進行了剖析,并做了相關實驗。

2 配置解讀

maxIdleCount int // zero means defaultMaxIdleConns; negative means 0maxOpen int // <= 0 means unlimitedmaxLifetime time.Duration // maximum amount of time a connection may be reusedmaxIdleTime time.Duration // maximum amount of time a connection may be idle before being closed

可以看到以上四個配置,是我們Go MySQL客戶端最重要的配置。

maxIdleCount 最大空閑連接數,默認不配置,是2個最大空閑連接

maxOpen 最大連接數,默認不配置,是不限制最大連接數

maxLifetime 連接最大存活時間

maxIdleTime 空閑連接最大存活時間

3 源碼解析

我們的場景是客戶端與MySQL建立的連接數經常大于最大空閑連接數,這會導致什么問題?我們看下下圖中的源碼。

MySQL的MaxIdleConns不合理,會變成短連接的原因

我們可以看到,當最大空閑連接數小于客戶端與數據庫建立的連接數的時候,那么就會返回false,并且最大連接數關閉計數器加1。

MySQL的MaxIdleConns不合理,會變成短連接的原因

然后上圖中,我們就可以看到,連接被關閉了(MySQL源碼里也不留點緩沖時間再關閉)。Go的MySQL客戶端這個操作,就會導致當突發流量情況下,由于請求量級過大,超過了最大空閑連接數的負載,那么新的連接在放入連接池的時候,會被無情的關閉,變成短連接,導致你的服務性能進一步惡化。

4 實驗4.1 模擬線上并發數大于MaxIdConns情況

測試代碼 , 為了檢測以上邏輯,假設了以下場景,設置最大連接數為100,最大空閑連接數為1,并發數為10的goroutine來請求數據庫。我們通過MySQL的stats的maxIdleClosed的統計,可以看到下圖,我們的連接不停的被關閉。

MySQL的MaxIdleConns不合理,會變成短連接的原因

4.2 模擬線上并發數小于MaxIdConns情況

測試代碼 ,假設了以下場景,設置最大連接數為100,最大空閑連接數為20,并發數為10的goroutine來請求數據庫,可以看到下圖中,無MaxIdleClosed的關閉統計。

MySQL的MaxIdleConns不合理,會變成短連接的原因

4.3 抓包驗證線上并發數大于MaxIdConns情況

測試代碼 ,為了驗證沒有理解錯代碼,抓個包最穩妥。我們將main函數里放個select{},程序執行完mysql的語句后,看下tcp狀態和抓包數據。

MySQL的MaxIdleConns不合理,會變成短連接的原因

MySQL的MaxIdleConns不合理,會變成短連接的原因

MySQL的MaxIdleConns不合理,會變成短連接的原因

MySQL的MaxIdleConns不合理,會變成短連接的原因

可以發現確實是tcp的狀態統計與MySQL客戶端的統計是一致的,并且存在fin包。

5 總結

當突發流量情況下,由于請求量級過大,超過了最大空閑連接數的負載,那么新的連接在放入連接池的時候,會被關閉,將連接變成短連接,導致服務性能進一步惡化。為了避免這種情況,下面列舉了,可以優化的措施。

提前將maxIdleConns設大,避免出現短連接

做好mysql讀寫分離

提升mysql的吞吐量:精簡返回字段,沒必要的字段不要返回,能夠夠快復用連接

吞吐量的包盡量不要太大,避免分包

優化連接池,當客戶端到MySQL的連接數大于最大空閑連接的時候,關閉能夠做一下延遲(官方不支持,估計只能自己實現)

讀請求的最好不要放MySQL里,盡量放redis里

6 測試代碼

https://github.com/gotomicro/test/tree/main/gorm

以上就是MySQL的MaxIdleConns不合理,會變成短連接的原因的詳細內容,更多關于MySQL的MaxIdleConns不合理的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
主站蜘蛛池模板: 精品玖玖玖视频在线观看 | 老外黑人欧美一级毛片 | 欧美亚洲免费 | 国产三级精品美女三级 | 成人yyyy| 成人资源网站 | 狠狠综合欧美综合欧美色 | 国产美腿丝袜福利视频在线观看 | 网红福利在线 | 国产色片在线观看 | 国内精品一级毛片免费看 | 亚洲成人中文 | 国产一区二区三区久久精品 | 综合久久久久 | 福利入口在线观看 | 亚洲欧美日韩中另类在线 | 亚洲天堂久久新 | 久亚洲精品不子伦一区 | 中文字幕 日韩有码 | 国产成人精品视频午夜 | 国产高清看片日韩欧美久久 | 亚洲国产一| 全部免费特黄特色大片视频 | 视频二区肥岳精品推荐 | a毛片免费全部播放完整成 a毛片免费观看 | 欧美一区二区三区视频 | 狼人 成人 综合 亚洲 | 可以看的毛片 | 福利一区二区三区视频在线观看 | 特黄特色一级特色大片中文 | 麻豆影视在线播放 | 亚洲一区二区三区免费看 | 97超在线视频| 欧美毛片日韩一级在线 | 亚洲欧美大片 | 日韩1区2区3区 | 九九久久国产精品免费热6 九九天天影视 | 国产在线19禁免费观看国产 | 好好的曰www视频在线观看 | 亚洲美女网站 | 一级一级一片免费 |