SQL數(shù)據(jù)庫連接超時時間已到的問題
SQL數(shù)據(jù)庫連接超時時間已到
問題
1:System.InvalidOperationException: 超時時間已到。超時時間已到,但是尚未從池中獲取連接。出現(xiàn)這種情況可能是因?yàn)樗谐剡B接均在使用,并且達(dá)到了最大池大小。
2:在向服務(wù)器發(fā)送請求時發(fā)生傳輸級錯誤。 (provider: TCP Provider, error: 0 - 由于系統(tǒng)緩沖區(qū)空間不足或隊(duì)列已滿,不能執(zhí)行套接字上的操作。)
3:已成功與服務(wù)器建立連接,但是在登錄前的握手期間發(fā)生錯誤。 (provider: SSL Provider, error: 0 - 等待的操作過時。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時。
4:在從服務(wù)器接收結(jié)果時發(fā)生傳輸級錯誤。 (provider: TCP Provider, error: 0 - 指定的網(wǎng)絡(luò)名不再可用。) ---> System.ComponentModel.Win32Exception (0x80004005): 指定的網(wǎng)絡(luò)名不再可用。
5:連接超時時間已到。在登錄后階段超過了此超時時間。連接可能在等待服務(wù)器完成登錄過程并響應(yīng)時超時;或者在嘗試創(chuàng)建多個活動連接時超時。 嘗試連接到此服務(wù)器時花費(fèi)的持續(xù)時間是 - [Pre-Login] initialization=2;handshake=5;[Login] initialization=0;authentication=0;[Post-Login] complete=14025; ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作過時。
解決方法
設(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ā)請求的情況,以下代碼可以查看SQL的連接數(shù),這個可以作為監(jiān)測的一種手段。
SELECT [program_name] ,[spid],* FROM [sys].[sysprocesses] WHERE [spid]>50 ?and [program_name]='.Net SqlClient Data Provider' and dbid= db_id('')?
數(shù)據(jù)庫訪問超時時間配置總結(jié)
1.背景
訪問數(shù)據(jù)庫超時間太長,訪問數(shù)據(jù)量大或者掃描的數(shù)據(jù)量太大,導(dǎo)致數(shù)據(jù)庫長時間無響應(yīng)。鏈接被占用無法釋放,會導(dǎo)致線程池被占滿。
因此,為了能夠及時釋放占用鏈接,其他業(yè)務(wù)對數(shù)據(jù)庫訪問不受影響,所以要合理設(shè)置數(shù)據(jù)庫訪問超時時間。
2.配置說明
2.1connectionTimeout配置大小
Jdbc的connectTimeout配置是指等待與數(shù)據(jù)庫建立socket鏈接的超時時間。如果未設(shè)置,默認(rèn)為0,代表永不超時。
代碼中checkoutTimeout的配置設(shè)置為1000s,表示連接池中連接獲取鏈接超時時間,設(shè)置過大會導(dǎo)致接口響應(yīng)變慢。
參考收單側(cè)的經(jīng)驗(yàn)值,connectTimeout設(shè)置為1000ms。
2.2socketTimeout配置大小
socketTimeout的配置是指客戶端與數(shù)據(jù)庫建立socket后,讀寫socket時的等待的超時時間。如果未設(shè)置,默認(rèn)為0,代表永不超時。zebra默認(rèn)的socketTimeout設(shè)置為60s。
根據(jù)對服務(wù)數(shù)據(jù)庫訪問統(tǒng)計發(fā)現(xiàn)最長為1-2s,socketTimeout可設(shè)置為3s
3.方案
3.1數(shù)據(jù)庫SDK配置修改
連接池連接超時等設(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)先級高,dba也推薦 | 需要發(fā)布服務(wù) | |
RDS-Zebra | 不需要發(fā)布服務(wù) | rd沒有權(quán)限,需要dba給配置 |
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法
這篇文章主要介紹了安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法,需要的朋友可以參考下2015-01-01SQLite數(shù)據(jù)庫管理相關(guān)命令的使用介紹
本篇文章小編為大家介紹,SQLite數(shù)據(jù)庫管理相關(guān)命令的使用說明。需要的朋友參考下2013-04-04SQL SERVER性能優(yōu)化綜述(很好的總結(jié),不要錯過哦)
一個系統(tǒng)的性能的提高,不單單是試運(yùn)行或者維護(hù)階段的性能調(diào)優(yōu)的任務(wù),也不單單是開發(fā)階段的事情,而是在整個軟件生命周期都需要注意,進(jìn)行有效工作才能達(dá)到的。所以我希望按照軟件生命周期的不同階段來總結(jié)數(shù)據(jù)庫性能優(yōu)化相關(guān)的注意事項(xiàng)。2008-09-09SQL Server數(shù)據(jù)庫自動備份的實(shí)現(xiàn)步驟
要編寫一個自動備份 SQL Server 數(shù)據(jù)庫的腳本,可以使用 SQL Server Management Studio (SSMS) 或者 Transact-SQL (T-SQL) 腳本,本文給大家介紹了一個一個簡單的 T-SQL 腳本示例,需要的朋友可以參考下2023-11-11利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫中每一條記錄分配行號的方法
這篇文章主要介紹了利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫中每一條記錄分配行號的方法,需要的朋友可以參考下2015-10-10