偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

微服務(wù)架構(gòu)下,MySQL讀寫分離后,Druid連接池參數(shù)優(yōu)化實(shí)戰(zhàn)

數(shù)據(jù)庫(kù) MySQL 架構(gòu)
最近利用MHA做好Mysql讀寫分離后,時(shí)不時(shí)有用戶反饋后臺(tái)發(fā)布文章時(shí),報(bào)程序“通用異常",經(jīng)問題排查,里面涉及應(yīng)用JDBC連接池參數(shù)及Mysql參數(shù)調(diào)整問題。

 前言

最近利用MHA做好Mysql讀寫分離后,時(shí)不時(shí)有用戶反饋后臺(tái)發(fā)布文章時(shí),報(bào)程序“通用異常",經(jīng)問題排查,里面涉及應(yīng)用JDBC連接池參數(shù)及Mysql參數(shù)調(diào)整問題。

[[277851]]

問題回顧

異常日志描述:

微服務(wù)架構(gòu)下,Mysql讀寫分離后,Druid連接池參數(shù)優(yōu)化實(shí)戰(zhàn)

從異常信息反映來(lái)看,問題關(guān)鍵有兩點(diǎn)

  1. 數(shù)據(jù)庫(kù)連接池超時(shí)設(shè)置大于wait_timeout
  2. 日志提示,可以通過驗(yàn)證數(shù)據(jù)庫(kù)連接或者設(shè)置:autoReconnect=true 來(lái)避免此異常

從以上兩點(diǎn)可以推測(cè)

第一、應(yīng)用程序數(shù)據(jù)庫(kù)連接池超時(shí)參數(shù)設(shè)置有問題

第二、安裝Mysql數(shù)據(jù)庫(kù)時(shí),對(duì)于Mysql的內(nèi)在參數(shù)wait_timeout沒有做實(shí)際場(chǎng)景的優(yōu)化處理

問題定位

wait_timeout參數(shù)具體用途

wait_timeout具體含義是服務(wù)器關(guān)閉非交互連接之前等待活動(dòng)秒數(shù)。MySQL缺省配置情況下,wait_timeout的初始值是28800秒,也就是8小時(shí)。如果wait_timeout超時(shí)時(shí)間設(shè)置過大,在MySQL管理系統(tǒng)里會(huì)產(chǎn)生大量的SLEEP進(jìn)程無(wú)法及時(shí)釋放,會(huì)導(dǎo)致服務(wù)器系統(tǒng)性能下降;同時(shí)該參數(shù)設(shè)置過小,會(huì)導(dǎo)致Mysql處理某些事務(wù)未處理,連接不可用狀態(tài)。

也就是說(shuō)如果在wait_timeout設(shè)置期間內(nèi),數(shù)據(jù)庫(kù)連接Connection一直處于空閑等待狀態(tài),mysql內(nèi)部會(huì)自動(dòng)關(guān)閉此連接,而應(yīng)用程序無(wú)法感知到,依然認(rèn)為連接池合法持有該連接。當(dāng)應(yīng)用端再次用該連接來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),就產(chǎn)生上述異常錯(cuò)誤。

應(yīng)用端Druid數(shù)據(jù)庫(kù)連接池參數(shù)排查

微服務(wù)架構(gòu)下,Mysql讀寫分離后,Druid連接池參數(shù)優(yōu)化實(shí)戰(zhàn)

發(fā)現(xiàn)連接池有個(gè)MaxWait參數(shù)設(shè)置過大:60000毫秒

  1. druidDataSource.setMaxWait(60000) 

然后在CSDN上,發(fā)現(xiàn)有個(gè)同行碰到同樣的問題:

發(fā)現(xiàn)數(shù)據(jù)庫(kù)等待超時(shí)時(shí)間(wait_timeout)是28800s,也就是8小時(shí),而應(yīng)用程連接池參數(shù)max-wait: 30000,所以導(dǎo)致項(xiàng)目判定該鏈接可用,而mysql判定該連接不可用導(dǎo)致連接失敗。

解決辦法

根據(jù)上面的分析思路,我們排查了Mysql生產(chǎn)庫(kù),發(fā)現(xiàn)默認(rèn)Mysql超時(shí)時(shí)間(wait_timeout)也是28800s,但是應(yīng)用層連接池MaxWait參數(shù)設(shè)置成60000,于是我把MaxWait參數(shù)設(shè)置成10000,小于Mysql超時(shí)時(shí)間(wait_timeout):28800 ,在測(cè)試環(huán)境等待8小時(shí)后,報(bào)錯(cuò)消失了。

其他擴(kuò)展思路(來(lái)源網(wǎng)絡(luò))

思路一:在jdbc-url后添加 &autoReconnect=true,使用后無(wú)效,查的該方案只適用于Mysql4之前的版本有效

思路二:將mysql回收空閑連接的時(shí)間變長(zhǎng),mysql默認(rèn)回收時(shí)間是8小時(shí),可以在mysql目錄下的my.ini中增加下面配置,將時(shí)間改為1天。單位是秒,最大好像是24天。 此配置會(huì)拖累數(shù)據(jù)庫(kù)性能,隨棄用該方案。

思路三:配置druid鏈接池,使用 validation-query test-on-borrow: true test-while-idle: true 三種屬性,每次獲取數(shù)據(jù)庫(kù)連接時(shí)判斷該連接是否可用。同時(shí)設(shè)置druidDataSource.setPhyTimeoutMillis參數(shù)

連接最大存活時(shí)間,默認(rèn)是-1(不限制物理連接時(shí)間),從創(chuàng)建連接開始計(jì)算,如果超過該時(shí)間,則會(huì)被清理druidDataSource.setPhyTimeoutMillis(15000);

參考例子

目前項(xiàng)目中趨于穩(wěn)定的連接池參數(shù)優(yōu)化實(shí)戰(zhàn),參考如下:

微服務(wù)架構(gòu)下,Mysql讀寫分離后,Druid連接池參數(shù)優(yōu)化實(shí)戰(zhàn)

Druid連接池參數(shù)官方說(shuō)明:

微服務(wù)架構(gòu)下,Mysql讀寫分離后,Druid連接池參數(shù)優(yōu)化實(shí)戰(zhàn)

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2011-05-13 09:34:51

TomcatMysql連接池

2021-03-24 09:06:01

MySQL長(zhǎng)連接短連接

2019-09-17 11:18:09

SQLMySQLJava

2022-02-21 07:48:54

Mysql數(shù)據(jù)庫(kù)SpringBoot

2011-06-01 13:54:10

MySQL

2018-01-01 05:23:13

服務(wù)化讀寫分離架構(gòu)

2019-12-30 15:30:13

連接池請(qǐng)求PHP

2025-01-16 10:30:49

2025-01-10 00:00:10

2022-11-11 09:41:04

連接池微服務(wù)數(shù)據(jù)庫(kù)

2021-07-07 14:20:15

高并發(fā)服務(wù)數(shù)據(jù)庫(kù)

2022-08-16 08:50:40

微服務(wù)動(dòng)態(tài)讀寫分離

2011-09-08 10:30:42

Druid數(shù)據(jù)庫(kù)連接池

2025-02-07 12:11:52

2009-11-11 14:04:14

ADO.NET連接池

2010-05-17 16:38:08

MySQL 連接池

2010-11-08 16:46:57

2022-05-13 07:31:58

數(shù)據(jù)庫(kù)連接池druid

2023-09-07 11:09:59

連接池本地端口號(hào)

2018-02-07 16:23:58

連接池內(nèi)存池AI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)