引發SQL數據庫超時的問題分析及解決辦法

1.因爲數據庫設計問題形成SQL數據庫新增數據時超時

症狀:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e31' ([ODBC SQL Server Driver]超時已過時);
服務器上看CPU、內存佔用率很低;
事件日誌中提示: 數據庫 '*********' 中文件 '***********' 的自動增加在 453 毫秒後已取消或出現超時。使用 ALTER DATABASE 設置更小的 FILEGROWTH 或設置新的大小。
緣由:
數據庫設置時,[文件增加]按百分比來增加,當數據庫文件很大時(1G以上),新增操做都會報超時,而這時候其實CPU、內存佔用率都很是很是的低。 
解決方法:
把上述的文件增加這裏設置爲一個更低的百分比或者直接指定增長多少兆字節。

2.SQL Server數據庫超時設置

修改客戶端的鏈接超時設置。默認狀況下,經過企業管理器註冊另一臺SQL Server的超時設置是 4 秒,而查詢分析器是 15 秒。

企業管理器中的設置:

A、在企業管理器中,選擇菜單上的"工具",再選擇"選項";
B、在彈出的"SQL Server企業管理器屬性"窗口中,點擊"高級"選項卡;
C、在"鏈接設置"下的"登陸超時(秒)"右邊的框中輸入一個比較大的數字,如 30。

查詢分析器中的設置:

單擊「工具」->"選項"->"鏈接"; 將登陸超時設置爲一個較大的數字,鏈接超時改成0。 

3.查詢語句時超時

    緣由分析:

    查詢超時通常來講首先要從sql語句和數據表的結構上找緣由,優化sql語句和爲數據庫的查詢字段建索引是最經常使用的辦法。 
    另外,數據庫的查詢超時設置通常是sqlserver本身維護的(在你沒有修改query wait配置前),只有當你的實際查詢時間超過估計查詢時間的25倍時,纔會超時。
    而形成超出估計值那麼多的緣由有兩種可能:
    一是估計時間不許確;
    二是sql語句涉及到大量佔用內存的查詢(如排序和哈希操做),內存不夠,須要排隊等待資源形成的。 

    解決辦法:
    A.優化語句,建立\使用合適的索引;
    B.解決第一個問題的方法,更新要查詢表的索引分發統計,保證估計時間的正確性,UPDATE STATISTICS 表名;
    C.增長內存 

    若是想手動設置查詢超時,可使用如下語句: 
    sp_configure 'show advanced options', 1 
    GO 
    RECONFIGURE 
    GO 
    sp_configure 'query wait', 2147483647 
    GO 
    RECONFIGURE 
    GO 

4.應用程序鏈接失敗

故障:
在應用程序中咱們也會遇到相似的錯誤信息,例如:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'. [Microsoft][ODBC SQL Server Driver]超時已過時.

解決方法:
A.若是遇到鏈接超時的錯誤,咱們能夠在程序中修改 Connection 對象的超時設置,再打開該鏈接。例如: 

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase"
Conn. Properties("Connect Timeout") = 15 '以秒爲單位
Conn.open DSNtest
%> 
B.  若是遇到查詢超時的錯誤,咱們能夠在程序中修改 Recordset 對象的超時設置,再打開結果集。例如:

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
'一樣以秒爲單位,若是設置爲 0 表示無限制
rs.Open cmd1, cn
rs.MoveFirst
. . . sql

相關文章
相關標籤/搜索