自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何配置MySQL數(shù)據(jù)庫超時設(shè)置

大數(shù)據(jù) 數(shù)據(jù)庫 MySQL
最近備戰(zhàn)京東雙11,在配置MySQL的超時配置發(fā)現(xiàn)有很多地方可以設(shè)置。這么多超時的配置有什么影響,以及配置會有什么影響呢?今天的文章就讓我來大家來分析一下。

[[207618]]

最近備戰(zhàn)京東雙11,在配置MySQL的超時配置發(fā)現(xiàn)有很多地方可以設(shè)置。這么多超時的配置有什么影響,以及配置會有什么影響呢?今天的文章就讓我來大家來分析一下。

1. JDBC超時設(shè)置

connectTimeout:表示等待和MySQL數(shù)據(jù)庫建立socket鏈接的超時時間,默認(rèn)值0,表示不設(shè)置超時,單位毫秒,建議30000

socketTimeout:表示客戶端和MySQL數(shù)據(jù)庫建立socket后,讀寫socket時的等待的超時時間,linux系統(tǒng)默認(rèn)的socketTimeout為30分鐘,可以不設(shè)置

2. 連接池超時設(shè)置

maxWait:表示從數(shù)據(jù)庫連接池取鏈接,連接池沒有可用連接時的等待時間,默認(rèn)值0,表示無限等待,單位毫秒,建議60000

3. MyBatis查詢超時

defaultStatementTimeout:表示在MyBatis配置文件中默認(rèn)查詢超時間,單位秒,不設(shè)置則無線等待

如果一些sql需要執(zhí)行超過defaultStatementTimeout可以通過Mapper文件單獨的sql的timeout進(jìn)行配置

MyBatis查詢超時

4. 事務(wù)超時

事務(wù)超時用于控制事務(wù)執(zhí)行的超時,執(zhí)行時間是事務(wù)內(nèi)所有代碼執(zhí)行總和,單位為秒。

事務(wù)超時

總結(jié)

高級別的timeout依賴于低級別的timeout,只有當(dāng)?shù)图墑e的timeout無誤時,高級別的timeout才能確保正常。例如,當(dāng)socket timeout出現(xiàn)問題時,高級別的statement timeout和transaction timeout都將失效。

1. Transaction Timeout

Spring提供的transaction timeout配置非常簡單,它會記錄每個事務(wù)的開始時間和消耗時間,當(dāng)特定的事件發(fā)生時就會對消耗時間做校驗,當(dāng)超出timeout值時將拋出異常。

假設(shè)某個事務(wù)中包含5個statement,每個statement的執(zhí)行時間是200ms,其他業(yè)務(wù)邏輯的執(zhí)行時間是100ms,那么transaction timeout至少應(yīng)該設(shè)置為1,100ms(200 * 5 + 100)。

2. Statement Timeout

statement timeout用來限制statement的執(zhí)行時長,timeout的值通過調(diào)用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API進(jìn)行設(shè)置。不過現(xiàn)在開發(fā)者已經(jīng)很少直接在代碼中設(shè)置,而多是通過框架來進(jìn)行設(shè)置。

在iBatis中,statement timeout的默認(rèn)值可以通過sql-map-config.xml中的defaultStatementTimeout 屬性進(jìn)行設(shè)置。同時,你還可以設(shè)置sqlmap中select,insert,update標(biāo)簽的timeout屬性,從而對不同sql語句的超時時間進(jìn)行獨立的配置。

3. Socket timeout

JDBC的socket timeout在數(shù)據(jù)庫被突然停掉或是發(fā)生網(wǎng)絡(luò)錯誤(由于設(shè)備故障等原因)時十分重要。由于TCP/IP的結(jié)構(gòu)原因,socket沒有辦法探測到網(wǎng)絡(luò)錯誤,因此應(yīng)用也無法主動發(fā)現(xiàn)數(shù)據(jù)庫連接斷開。如果沒有設(shè)置socket timeout的話,應(yīng)用在數(shù)據(jù)庫返回結(jié)果前會無期限地等下去,這種連接被稱為dead connection。

為了避免dead connections,socket必須要有超時配置。socket timeout可以通過JDBC設(shè)置,socket timeout能夠避免應(yīng)用在發(fā)生網(wǎng)絡(luò)錯誤時產(chǎn)生無休止等待的情況,縮短服務(wù)失效的時間。

不推薦使用socket timeout來限制statement的執(zhí)行時長,因此socket timeout的值必須要高于statement timeout,否則,socket timeout將會先生效,這樣statement timeout就變得毫無意義,也無法生效。

責(zé)任編輯:趙寧寧 來源: 36大數(shù)據(jù)
相關(guān)推薦

2011-03-24 14:59:42

2009-03-24 10:45:39

MySQL5連接超時數(shù)據(jù)庫

2010-04-19 16:01:54

2011-05-16 14:07:12

MySQL數(shù)據(jù)庫設(shè)置密碼

2021-12-13 22:59:23

MySQL數(shù)據(jù)庫SQL

2015-10-22 16:26:59

MySQL數(shù)據(jù)庫雙主配置

2011-04-14 11:09:14

MySQL數(shù)據(jù)庫

2011-02-28 15:45:12

2011-04-06 09:59:00

MySQL數(shù)據(jù)庫主從復(fù)制

2010-06-01 16:35:43

MySQL數(shù)據(jù)庫

2011-03-07 09:26:37

2019-10-12 16:15:13

MySQL數(shù)據(jù)庫多實例

2010-06-01 12:51:23

MySQL數(shù)據(jù)庫

2011-03-21 17:00:23

MySQL數(shù)據(jù)庫

2009-02-02 13:16:23

修復(fù)數(shù)據(jù)表MySQL

2011-05-18 13:16:21

MySQL數(shù)據(jù)庫鎖定

2018-09-11 17:13:23

MySQ數(shù)據(jù)庫重復(fù)記錄

2010-05-28 18:44:45

2010-06-09 10:47:36

MySQL數(shù)據(jù)庫集群

2010-05-26 18:16:31

MySQL數(shù)據(jù)庫安裝
點贊
收藏

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