SQL數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間已到的問題
SQL數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間已到
問題
1:System.InvalidOperationException: 超時(shí)時(shí)間已到。超時(shí)時(shí)間已到,但是尚未從池中獲取連接。出現(xiàn)這種情況可能是因?yàn)樗谐剡B接均在使用,并且達(dá)到了最大池大小。
2:在向服務(wù)器發(fā)送請(qǐng)求時(shí)發(fā)生傳輸級(jí)錯(cuò)誤。 (provider: TCP Provider, error: 0 - 由于系統(tǒng)緩沖區(qū)空間不足或隊(duì)列已滿,不能執(zhí)行套接字上的操作。)
3:已成功與服務(wù)器建立連接,但是在登錄前的握手期間發(fā)生錯(cuò)誤。 (provider: SSL Provider, error: 0 - 等待的操作過時(shí)。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時(shí)。
4:在從服務(wù)器接收結(jié)果時(shí)發(fā)生傳輸級(jí)錯(cuò)誤。 (provider: TCP Provider, error: 0 - 指定的網(wǎng)絡(luò)名不再可用。) ---> System.ComponentModel.Win32Exception (0x80004005): 指定的網(wǎng)絡(luò)名不再可用。
5:連接超時(shí)時(shí)間已到。在登錄后階段超過了此超時(shí)時(shí)間。連接可能在等待服務(wù)器完成登錄過程并響應(yīng)時(shí)超時(shí);或者在嘗試創(chuàng)建多個(gè)活動(dòng)連接時(shí)超時(shí)。 嘗試連接到此服務(wù)器時(shí)花費(fèi)的持續(xù)時(shí)間是 - [Pre-Login] initialization=2;handshake=5;[Login] initialization=0;authentication=0;[Post-Login] complete=14025; ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時(shí)。
解決方法
設(shè)置最大超時(shí)時(shí)間
server=192.168.0.1;User ID=sa;Password=123;database=;Min Pool Size=0;Max Pool Size=30000;Pooling=true;
一般這種出現(xiàn)于高并發(fā)請(qǐng)求的情況,以下代碼可以查看SQL的連接數(shù),這個(gè)可以作為監(jiān)測(cè)的一種手段。
SELECT [program_name] ,[spid],* FROM [sys].[sysprocesses] WHERE [spid]>50 ?and [program_name]='.Net SqlClient Data Provider' and dbid= db_id('')?數(shù)據(jù)庫(kù)訪問超時(shí)時(shí)間配置總結(jié)
1.背景
訪問數(shù)據(jù)庫(kù)超時(shí)間太長(zhǎng),訪問數(shù)據(jù)量大或者掃描的數(shù)據(jù)量太大,導(dǎo)致數(shù)據(jù)庫(kù)長(zhǎng)時(shí)間無響應(yīng)。鏈接被占用無法釋放,會(huì)導(dǎo)致線程池被占滿。
因此,為了能夠及時(shí)釋放占用鏈接,其他業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)訪問不受影響,所以要合理設(shè)置數(shù)據(jù)庫(kù)訪問超時(shí)時(shí)間。
2.配置說明
2.1connectionTimeout配置大小
Jdbc的connectTimeout配置是指等待與數(shù)據(jù)庫(kù)建立socket鏈接的超時(shí)時(shí)間。如果未設(shè)置,默認(rèn)為0,代表永不超時(shí)。
代碼中checkoutTimeout的配置設(shè)置為1000s,表示連接池中連接獲取鏈接超時(shí)時(shí)間,設(shè)置過大會(huì)導(dǎo)致接口響應(yīng)變慢。
參考收單側(cè)的經(jīng)驗(yàn)值,connectTimeout設(shè)置為1000ms。
2.2socketTimeout配置大小
socketTimeout的配置是指客戶端與數(shù)據(jù)庫(kù)建立socket后,讀寫socket時(shí)的等待的超時(shí)時(shí)間。如果未設(shè)置,默認(rèn)為0,代表永不超時(shí)。zebra默認(rèn)的socketTimeout設(shè)置為60s。
根據(jù)對(duì)服務(wù)數(shù)據(jù)庫(kù)訪問統(tǒng)計(jì)發(fā)現(xiàn)最長(zhǎng)為1-2s,socketTimeout可設(shè)置為3s


3.方案
3.1數(shù)據(jù)庫(kù)SDK配置修改
連接池連接超時(shí)等設(shè)定需要設(shè)置到extraJdbcUrlParams參數(shù)中如下:
<property name="extraJdbcUrlParams" value="connectTimeout=1000&socketTimeout=3000&useSSL=false"/>
jdbcdriver 5.1.36及以上版本需要在jdbcurl設(shè)置 "useSSL=false" 參數(shù), 可以通過此方式設(shè)置
3.2 默認(rèn)SDK配置修改
修改jdbcRef配置

3.3最終方案
優(yōu)點(diǎn) | 不足 | 結(jié)果 | |
|---|---|---|---|
Db-client-SDK | 服務(wù)代碼中,可自由配置 比配置jdbcRef優(yōu)先級(jí)高,dba也推薦 | 需要發(fā)布服務(wù) | |
RDS-Zebra | 不需要發(fā)布服務(wù) | rd沒有權(quán)限,需要dba給配置 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
眾所周知,在M$sql中有個(gè)絕對(duì)是網(wǎng)絡(luò)安全中的隱患的帳號(hào)sa,系統(tǒng)管理員 (sa),默認(rèn)情況下,它指派給固定服務(wù)器角色 sysadmin,并不能進(jìn)行更改。這個(gè)sa一般情況下是既不可以更改名稱,也不可以刪除,呵呵,有點(diǎn)雞肋的味道,棄置可惜,食之無味。裝上sql2000之后,感覺怪怪的,放著這個(gè)后門在,始終都不放心,擔(dān)心有一天被人破出密碼,那偶的電腦不就完拉??赡苣慊卣f設(shè)個(gè)強(qiáng)壯點(diǎn)的密碼,這個(gè)辦法是可行,可不是長(zhǎng)久之記,所謂斬草要除根,要是把sa給刪拉就不用擔(dān)心那些"黑客"暴力破解拉。2008-04-04
SQL Server存儲(chǔ)過程同時(shí)返回分頁(yè)結(jié)果集和總數(shù)
這篇文章主要為大家詳細(xì)介紹了SQL Server存儲(chǔ)過程同時(shí)返回分頁(yè)結(jié)果集和總數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
sqlserver 批量刪除存儲(chǔ)過程和批量修改存儲(chǔ)過程的語(yǔ)句
sqlserver 批量刪除存儲(chǔ)過程和批量修改存儲(chǔ)過程的語(yǔ)句,需要的朋友可以參考下。2011-07-07
分組字符合并SQL語(yǔ)句 按某字段合并字符串之一(簡(jiǎn)單合并)
這篇文章主要介紹了分組字符合并SQL語(yǔ)句 按某字段合并字符串之一(簡(jiǎn)單合并),需要的朋友可以參考下2017-02-02
MS SQL SERVER 數(shù)據(jù)庫(kù)日志壓縮方法與代碼
MS SQL SERVER 數(shù)據(jù)庫(kù)日志壓縮方法與代碼...2007-03-03
大容量csv快速內(nèi)導(dǎo)入sqlserver的解決方法(推薦)
最近遇到這樣的問題:導(dǎo)入csv 數(shù)據(jù),并對(duì)導(dǎo)入的數(shù)據(jù)增加一個(gè)新的列date datetime,下面通過本文給大家分享大容量csv快速內(nèi)導(dǎo)入sqlserver的解決方法,感興趣的朋友一起看看吧2017-07-07
如何統(tǒng)計(jì)全天各個(gè)時(shí)間段產(chǎn)品銷量情況(sqlserver)
對(duì)一個(gè)賣場(chǎng)來說,肯定有負(fù)責(zé)人每天定時(shí)去統(tǒng)計(jì)每天各個(gè)時(shí)間段產(chǎn)品銷量情況,以此保證賣場(chǎng)長(zhǎng)期可持續(xù)發(fā)展,有的用excel表統(tǒng)計(jì),但是用起來很不方便,下面給大家介紹sqlserver版如何統(tǒng)計(jì)全天各個(gè)時(shí)間段產(chǎn)品銷量情況2015-08-08
數(shù)據(jù)庫(kù)中經(jīng)常用到的操作和管理數(shù)據(jù)庫(kù)的語(yǔ)句總結(jié)
數(shù)據(jù)庫(kù)中經(jīng)常用到的操作和管理數(shù)據(jù)庫(kù)的語(yǔ)句,感謝作者的辛勤勞動(dòng),很多。2010-06-06

