作者:張松然
最近備戰(zhàn)京東雙11,在配置MySQL的超時(shí)配置發(fā)現(xiàn)有很多地方可以設(shè)置。這么多超時(shí)的配置有什么影響,以及配置會(huì)有什么影響呢?今天的文章就讓我來(lái)大家來(lái)分析一下。
1. JDBC超時(shí)設(shè)置
connectTimeout:表示等待和MySQL數(shù)據(jù)庫(kù)建立socket鏈接的超時(shí)時(shí)間,默認(rèn)值0,表示不設(shè)置超時(shí),單位毫秒,建議30000
socketTimeout:表示客戶(hù)端和MySQL數(shù)據(jù)庫(kù)建立socket后,讀寫(xiě)socket時(shí)的等待的超時(shí)時(shí)間,linux系統(tǒng)默認(rèn)的socketTimeout為30分鐘,可以不設(shè)置
2. 連接池超時(shí)設(shè)置
maxWait:表示從數(shù)據(jù)庫(kù)連接池取鏈接,連接池沒(méi)有可用連接時(shí)的等待時(shí)間,默認(rèn)值0,表示無(wú)限等待,單位毫秒,建議60000
3. MyBatis查詢(xún)超時(shí)
defaultStatementTimeout:表示在MyBatis配置文件中默認(rèn)查詢(xún)超時(shí)間,單位秒,不設(shè)置則無(wú)線等待
如果一些sql需要執(zhí)行超過(guò)defaultStatementTimeout可以通過(guò)Mapper文件單獨(dú)的sql的timeout進(jìn)行配置
4. 事務(wù)超時(shí)
事務(wù)超時(shí)用于控制事務(wù)執(zhí)行的超時(shí),執(zhí)行時(shí)間是事務(wù)內(nèi)所有代碼執(zhí)行總和,單位為秒。
總結(jié)
高級(jí)別的timeout依賴(lài)于低級(jí)別的timeout,只有當(dāng)?shù)图?jí)別的timeout無(wú)誤時(shí),高級(jí)別的timeout才能確保正常。例如,當(dāng)socket timeout出現(xiàn)問(wèn)題時(shí),高級(jí)別的statement timeout和transaction timeout都將失效。
1. Transaction Timeout
Spring提供的transaction timeout配置非常簡(jiǎn)單,它會(huì)記錄每個(gè)事務(wù)的開(kāi)始時(shí)間和消耗時(shí)間,當(dāng)特定的事件發(fā)生時(shí)就會(huì)對(duì)消耗時(shí)間做校驗(yàn),當(dāng)超出timeout值時(shí)將拋出異常。
假設(shè)某個(gè)事務(wù)中包含5個(gè)statement,每個(gè)statement的執(zhí)行時(shí)間是200ms,其他業(yè)務(wù)邏輯的執(zhí)行時(shí)間是100ms,那么transaction timeout至少應(yīng)該設(shè)置為1,100ms(200 * 5 + 100)。
2.?Statement Timeout
statement timeout用來(lái)限制statement的執(zhí)行時(shí)長(zhǎng),timeout的值通過(guò)調(diào)用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API進(jìn)行設(shè)置。不過(guò)現(xiàn)在開(kāi)發(fā)者已經(jīng)很少直接在代碼中設(shè)置,而多是通過(guò)框架來(lái)進(jìn)行設(shè)置。
在iBatis中,statement timeout的默認(rèn)值可以通過(guò)sql-map-config.xml中的defaultStatementTimeout 屬性進(jìn)行設(shè)置。同時(shí),你還可以設(shè)置sqlmap中select,insert,update標(biāo)簽的timeout屬性,從而對(duì)不同sql語(yǔ)句的超時(shí)時(shí)間進(jìn)行獨(dú)立的配置。
3.?Socket timeout
JDBC的socket timeout在數(shù)據(jù)庫(kù)被突然停掉或是發(fā)生網(wǎng)絡(luò)錯(cuò)誤(由于設(shè)備故障等原因)時(shí)十分重要。由于TCP/IP的結(jié)構(gòu)原因,socket沒(méi)有辦法探測(cè)到網(wǎng)絡(luò)錯(cuò)誤,因此應(yīng)用也無(wú)法主動(dòng)發(fā)現(xiàn)數(shù)據(jù)庫(kù)連接斷開(kāi)。如果沒(méi)有設(shè)置socket timeout的話(huà),應(yīng)用在數(shù)據(jù)庫(kù)返回結(jié)果前會(huì)無(wú)期限地等下去,這種連接被稱(chēng)為dead connection。
為了避免dead connections,socket必須要有超時(shí)配置。socket timeout可以通過(guò)JDBC設(shè)置,socket timeout能夠避免應(yīng)用在發(fā)生網(wǎng)絡(luò)錯(cuò)誤時(shí)產(chǎn)生無(wú)休止等待的情況,縮短服務(wù)失效的時(shí)間。
不推薦使用socket timeout來(lái)限制statement的執(zhí)行時(shí)長(zhǎng),因此socket timeout的值必須要高于statement timeout,否則,socket timeout將會(huì)先生效,這樣statement timeout就變得毫無(wú)意義,也無(wú)法生效。
- 金山辦公宣布未來(lái)五年戰(zhàn)略:重建海外基地,優(yōu)化WPS Office用戶(hù)體驗(yàn)
- 是德科技攜KAI系列布局AI新時(shí)代
- 微軟全球再裁6000人:無(wú)關(guān)績(jī)效,關(guān)乎未來(lái)
- 華為發(fā)布AI數(shù)據(jù)湖解決方案,助力企業(yè)加速擁抱AI
- 工信部等七部門(mén)聯(lián)合發(fā)文!以數(shù)智化賦能醫(yī)藥工業(yè)全鏈條轉(zhuǎn)型升級(jí)
- 擎畫(huà)算力賦能新藍(lán)圖,城市算網(wǎng)專(zhuān)家座談會(huì)在京成功舉辦
- 2024年Q4全球服務(wù)器收入773億美元同比增91%,非x86占比225億美元同比增262.1%
- 面向全球!華為發(fā)布IOC機(jī)場(chǎng)智能運(yùn)控中心等五大航空解決方案
- 微軟停止中國(guó)區(qū)運(yùn)營(yíng)?系外包公司,約2000人項(xiàng)目組被裁撤
- 第九屆華為ICT大賽中國(guó)總決賽收官 84支隊(duì)伍晉級(jí)全球總決賽
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。