溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MSSQL數(shù)據(jù)庫超時(shí)的解決方法是什么

發(fā)布時(shí)間:2021-11-04 11:20:42 來源:億速云 閱讀:158 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要講解了“MSSQL數(shù)據(jù)庫超時(shí)的解決方法是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MSSQL數(shù)據(jù)庫超時(shí)的解決方法是什么”吧!

如果SQL的數(shù)據(jù)庫越來越多,有時(shí)候會(huì)遇到讀取超時(shí),鎖等一大堆問題,按經(jīng)驗(yàn)來說,數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)不合理,經(jīng)常使用視圖等原因都有,那些怎么解決呢?
1、由于數(shù)據(jù)庫設(shè)計(jì)問題造成SQL數(shù)據(jù)庫新增數(shù)據(jù)時(shí)超時(shí)

癥狀:

A、

Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e31'

[ODBC SQL Server Driver]超時(shí)已過期)

B、服務(wù)器上看CPU、內(nèi)存占用率很低;

C、事件日志中提示: 數(shù)據(jù)庫 '*********' 中文件 '***********' 的自動(dòng)增長(zhǎng)在 453 毫秒后已取消或出現(xiàn)超時(shí)。使用 ALTER DATABASE 設(shè)置更小的 FILEGROWTH 或設(shè)置新的大小。

原因:

數(shù)據(jù)庫設(shè)置時(shí),[文件增長(zhǎng)]按百分比來增長(zhǎng),當(dāng)數(shù)據(jù)庫文件很大時(shí)(1G以上),新增操作都會(huì)報(bào)超時(shí),而這時(shí)候其實(shí)CPU、內(nèi)存占用率都非常非常的低。

解決方法:

把上述的文件增長(zhǎng)這里設(shè)置為一個(gè)更低的百分比或者直接指定增加多少兆字節(jié)。

2、SQL Server數(shù)據(jù)庫超時(shí)設(shè)置

修改客戶端的連接超時(shí)設(shè)置。默認(rèn)情況下,通過企業(yè)管理器注冊(cè)另外一臺(tái)SQL Server的超時(shí)設(shè)置是 4 秒,而查詢分析器是 15 秒。

企業(yè)管理器中的設(shè)置:

A、在企業(yè)管理器中,選擇菜單上的"工具",再選擇"選項(xiàng)";

B、在彈出的"SQL Server企業(yè)管理器屬性"窗口中,點(diǎn)擊"高級(jí)"選項(xiàng)卡;

C、在"連接設(shè)置"下的"登錄超時(shí)(秒)"右邊的框中輸入一個(gè)比較大的數(shù)字,如 30。

查詢分析器中的設(shè)置:

單擊“工具”->"選項(xiàng)"->"連接"; 將登錄超時(shí)設(shè)置為一個(gè)較大的數(shù)字,連接超時(shí)改為0。

3、查詢語句時(shí)超時(shí)

原因分析:

查詢超時(shí)一般來說首先要從sql語句和數(shù)據(jù)表的結(jié)構(gòu)上找原因,優(yōu)化sql語句和為數(shù)據(jù)庫的查詢字段建索引是最常用的辦法。

另外,數(shù)據(jù)庫的查詢超時(shí)設(shè)置一般是sqlserver自己維護(hù)的(在你沒有修改query wait配置前),只有當(dāng)你的實(shí)際查詢時(shí)間超過估計(jì)查詢時(shí)間的25倍時(shí),才會(huì)超時(shí)。而造成超出估計(jì)值那么多的原因有兩種可能:

一是估計(jì)時(shí)間不準(zhǔn)確;

二是sql語句涉及到大量占用內(nèi)存的查詢(如排序和哈希操作),內(nèi)存不夠,需要排隊(duì)等待資源造成的。

解決辦法:

A、優(yōu)化語句,創(chuàng)建/使用合適的索引;

B、解決第一個(gè)問題的方法,更新要查詢表的索引分發(fā)統(tǒng)計(jì),保證估計(jì)時(shí)間的正確性,UPDATE STATISTICS 表名;

C、增加內(nèi)存。

如果想手動(dòng)設(shè)置查詢超時(shí),可以使用以下語句:

sp_configure 'show advanced options', 1

GO

RECONFIGURE

GO

sp_configure 'query wait', 2147483647

GO

RECONFIGURE

GO

4、應(yīng)用程序連接失敗

故障:

在應(yīng)用程序中我們也會(huì)遇到類似的錯(cuò)誤信息,例如:

Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80004005'

[Microsoft][ODBC SQL Server Driver]超時(shí)已過期

解決方法:

A、如果遇到連接超時(shí)的錯(cuò)誤,我們可以在程序中修改 Connection 對(duì)象的超時(shí)設(shè)置,再打開該連接。例如:

<%

Set Conn = Server.CreateObject("ADODB.Connection")

DSNtest="DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase"

Conn. Properties("Connect Timeout") = 15 '以秒為單位,0表示不限制

Conn.open DSNtest

%>

B、如果遇到查詢超時(shí)的錯(cuò)誤,我們可以在程序中修改 Recordset 對(duì)象的超時(shí)設(shè)置,再打開結(jié)果集。例如:

Dim cn As New ADODB.Connection

Dim rs As ADODB.Recordset

cmd1 = txtQuery.Text

Set rs = New ADODB.Recordset

rs.Properties("Command Time Out") = 300

'同樣以秒為單位,如果設(shè)置為 0 表示無限制

rs.Open cmd1, cn

rs.MoveFirst

感謝各位的閱讀,以上就是“MSSQL數(shù)據(jù)庫超時(shí)的解決方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)MSSQL數(shù)據(jù)庫超時(shí)的解決方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI