色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

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

最近石墨文檔線上業(yè)務(wù)出現(xiàn)了一些性能問(wèn)題,在突發(fā)流量情況下,有個(gè)業(yè)務(wù)性能急劇下降。該服務(wù)是依賴(lài)于數(shù)據(jù)庫(kù)的業(yè)務(wù),會(huì)批量獲取數(shù)據(jù)庫(kù)里的數(shù)據(jù)。在經(jīng)過(guò)一系列的排查過(guò)程后,發(fā)現(xiàn)該服務(wù)到數(shù)據(jù)庫(kù)的連接數(shù)經(jīng)常超過(guò)MaxIdleConns,因此懷疑是數(shù)據(jù)庫(kù)的配置導(dǎo)致的性能問(wèn)題,所以以下針對(duì)數(shù)據(jù)庫(kù)的代碼進(jìn)行了剖析,并做了相關(guān)實(shí)驗(yàn)。

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

可以看到以上四個(gè)配置,是我們Go MySQL客戶(hù)端最重要的配置。

maxIdleCount 最大空閑連接數(shù),默認(rèn)不配置,是2個(gè)最大空閑連接

maxOpen 最大連接數(shù),默認(rèn)不配置,是不限制最大連接數(shù)

maxLifetime 連接最大存活時(shí)間

maxIdleTime 空閑連接最大存活時(shí)間

3 源碼解析

我們的場(chǎng)景是客戶(hù)端與MySQL建立的連接數(shù)經(jīng)常大于最大空閑連接數(shù),這會(huì)導(dǎo)致什么問(wèn)題?我們看下下圖中的源碼。

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

我們可以看到,當(dāng)最大空閑連接數(shù)小于客戶(hù)端與數(shù)據(jù)庫(kù)建立的連接數(shù)的時(shí)候,那么就會(huì)返回false,并且最大連接數(shù)關(guān)閉計(jì)數(shù)器加1。

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

然后上圖中,我們就可以看到,連接被關(guān)閉了(MySQL源碼里也不留點(diǎn)緩沖時(shí)間再關(guān)閉)。Go的MySQL客戶(hù)端這個(gè)操作,就會(huì)導(dǎo)致當(dāng)突發(fā)流量情況下,由于請(qǐng)求量級(jí)過(guò)大,超過(guò)了最大空閑連接數(shù)的負(fù)載,那么新的連接在放入連接池的時(shí)候,會(huì)被無(wú)情的關(guān)閉,變成短連接,導(dǎo)致你的服務(wù)性能進(jìn)一步惡化。

4 實(shí)驗(yàn)4.1 模擬線上并發(fā)數(shù)大于MaxIdConns情況

測(cè)試代碼 , 為了檢測(cè)以上邏輯,假設(shè)了以下場(chǎng)景,設(shè)置最大連接數(shù)為100,最大空閑連接數(shù)為1,并發(fā)數(shù)為10的goroutine來(lái)請(qǐng)求數(shù)據(jù)庫(kù)。我們通過(guò)MySQL的stats的maxIdleClosed的統(tǒng)計(jì),可以看到下圖,我們的連接不停的被關(guān)閉。

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

4.2 模擬線上并發(fā)數(shù)小于MaxIdConns情況

測(cè)試代碼 ,假設(shè)了以下場(chǎng)景,設(shè)置最大連接數(shù)為100,最大空閑連接數(shù)為20,并發(fā)數(shù)為10的goroutine來(lái)請(qǐng)求數(shù)據(jù)庫(kù),可以看到下圖中,無(wú)MaxIdleClosed的關(guān)閉統(tǒng)計(jì)。

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

4.3 抓包驗(yàn)證線上并發(fā)數(shù)大于MaxIdConns情況

測(cè)試代碼 ,為了驗(yàn)證沒(méi)有理解錯(cuò)代碼,抓個(gè)包最穩(wěn)妥。我們將main函數(shù)里放個(gè)select{},程序執(zhí)行完mysql的語(yǔ)句后,看下tcp狀態(tài)和抓包數(shù)據(jù)。

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因

可以發(fā)現(xiàn)確實(shí)是tcp的狀態(tài)統(tǒng)計(jì)與MySQL客戶(hù)端的統(tǒng)計(jì)是一致的,并且存在fin包。

5 總結(jié)

當(dāng)突發(fā)流量情況下,由于請(qǐng)求量級(jí)過(guò)大,超過(guò)了最大空閑連接數(shù)的負(fù)載,那么新的連接在放入連接池的時(shí)候,會(huì)被關(guān)閉,將連接變成短連接,導(dǎo)致服務(wù)性能進(jìn)一步惡化。為了避免這種情況,下面列舉了,可以?xún)?yōu)化的措施。

提前將maxIdleConns設(shè)大,避免出現(xiàn)短連接

做好mysql讀寫(xiě)分離

提升mysql的吞吐量:精簡(jiǎn)返回字段,沒(méi)必要的字段不要返回,能夠夠快復(fù)用連接

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

優(yōu)化連接池,當(dāng)客戶(hù)端到MySQL的連接數(shù)大于最大空閑連接的時(shí)候,關(guān)閉能夠做一下延遲(官方不支持,估計(jì)只能自己實(shí)現(xiàn))

讀請(qǐng)求的最好不要放MySQL里,盡量放redis里

6 測(cè)試代碼

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

以上就是MySQL的MaxIdleConns不合理,會(huì)變成短連接的原因的詳細(xì)內(nèi)容,更多關(guān)于MySQL的MaxIdleConns不合理的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 欧美成人一区二区三区在线视频 | 免费一级毛片麻豆精品 | 日韩影院久久 | 日韩欧美视频在线一区二区 | 欧美成人国产一区二区 | 国产高清在线视频 | 91亚洲国产成人久久精品网站 | 亚洲精品在线看 | 综合欧美日韩一区二区三区 | 男女午夜| 久久视频精品线视频在线网站 | 日本色网址| 欧美黄成人免费网站大全 | 91黑丝国产线观看免费 | 99在线热视频只有精品免费 | 国产免费人成在线看视频 | 欧美午夜a级精美理论片 | 中文字幕 亚洲精品 第1页 | 天码毛片一区二区三区入口 | 在线视频日本 | 久久99爰这里有精品国产 | 久久久国产一区二区三区丝袜 | 日韩 欧美 自拍 | 亚洲伊人色综合网站小说 | 亚洲香蕉久久一区二区三区四区 | 国产三级免费观看 | 欧美一级www毛片 | 久久女同互慰一区二区三区 | www.99在线观看 | 一级a性色生活片久久毛片 一级a做爰片欧欧美毛片4 | 国产激情视频网站 | 麻豆传媒一区 | 蜜桃日本一道无卡不码高清 | 久久91精品国产99久久yfo | 国产乱子伦在线观看不卡 | 涩里番资源网站在线观看 | 在线免费成人 | 欧美黄色xxx | 美女操男人 | 欧美成人爽毛片在线视频 | 欧美jizzhd精品欧美高清 |