分享解決SQL資料庫超時(timeout)的問題可能原因
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 秒。
企業管理器中的設定:
在企業管理器中,選擇選單上的"工具",再選擇"選項";
在彈出的"SQL Server企業管理器屬性"視窗中,點選"高階"選項卡;
在"連線設定"下的"登入超時(秒)"右邊的框中輸入一個比較大的數字,如 30。
查詢分析器中的設定:
單擊“工具”->"選項"->"連線"; 將登入超時設定為一個較大的數字,連線超時改為0。
3.查詢語句時超時
原因分析:
查詢超時一般來說首先要從sql語句和資料表的結構上找原因,最佳化sql語句和為資料庫的查詢欄位建索引是最常用的辦法。
另外,資料庫的查詢超時設定一般是sqlserver自己維護的(在你沒有修改query wait配置前),只有當你的實際查詢時間超過估計查詢時間的25倍時,才會超時。
而造成超出估計值那麼多的原因有兩種可能:
估計時間不準確;
sql語句涉及到大量佔用記憶體的查詢(如排序和雜湊操作),記憶體不夠,需要排隊等待資源造成的。
解決辦法:
最佳化語句,建立使用合適的索引;
解決第一個問題的方法,更新要查詢表的索引分發統計,保證估計時間的正確性,UPDATE STATISTICS 表名;
增加記憶體
如果想手動設定查詢超時,可以使用以下語句:
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.ConnectionDim rs As ADODB.Recordset. . . cmd1 = txtQuery.TextSet rs = New ADODB.Recordsetrs.Properties("Command Time Out") = 300'同樣以秒為單位,如果設定為 0 表示無限制rs.Open cmd1, cnrs.MoveFirst. . .
[@more@]
症狀:
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 秒。
企業管理器中的設定:
在企業管理器中,選擇選單上的"工具",再選擇"選項";
在彈出的"SQL Server企業管理器屬性"視窗中,點選"高階"選項卡;
在"連線設定"下的"登入超時(秒)"右邊的框中輸入一個比較大的數字,如 30。
查詢分析器中的設定:
單擊“工具”->"選項"->"連線"; 將登入超時設定為一個較大的數字,連線超時改為0。
3.查詢語句時超時
原因分析:
查詢超時一般來說首先要從sql語句和資料表的結構上找原因,最佳化sql語句和為資料庫的查詢欄位建索引是最常用的辦法。
另外,資料庫的查詢超時設定一般是sqlserver自己維護的(在你沒有修改query wait配置前),只有當你的實際查詢時間超過估計查詢時間的25倍時,才會超時。
而造成超出估計值那麼多的原因有兩種可能:
估計時間不準確;
sql語句涉及到大量佔用記憶體的查詢(如排序和雜湊操作),記憶體不夠,需要排隊等待資源造成的。
解決辦法:
最佳化語句,建立使用合適的索引;
解決第一個問題的方法,更新要查詢表的索引分發統計,保證估計時間的正確性,UPDATE STATISTICS 表名;
增加記憶體
如果想手動設定查詢超時,可以使用以下語句:
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.ConnectionDim rs As ADODB.Recordset. . . cmd1 = txtQuery.TextSet rs = New ADODB.Recordsetrs.Properties("Command Time Out") = 300'同樣以秒為單位,如果設定為 0 表示無限制rs.Open cmd1, cnrs.MoveFirst. . .
[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1043229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql Server 資料庫超時問題SQLServer資料庫
- MSSQL資料庫超時的原因與解決方法SQL資料庫
- Oracle資料庫導致效能問題的可能原因Oracle資料庫
- Selenium爬蟲遇到超時TimeOut問題的解決方法爬蟲
- 解決 nginx 反向代理時的 upstream timeout 問題Nginx
- SQL超時解決方案-有時並不是設定問題SQL
- 常見的HTTP介面超時問題出現原因及解決辦法HTTP
- 解決 go get 超時問題Go
- 使用requests庫解決Session物件設定超時的問題Session物件
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- .net 資料庫連線池超時問題資料庫
- websphere 應用超時問題的解決Web
- ajax資料無法更新問題原因及解決
- 資料庫連結時的時區問題serverTimezone永久解決資料庫Server
- 資料庫——慢sql的原因資料庫SQL
- 解決SQL Server資料庫維護計劃失敗的問題SQLServer資料庫
- 安裝資料庫和資料庫解決問題資料庫
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 解決代理連線超時問題
- 解決被掛起的資料庫問題資料庫
- Nginx的超時timeout配置詳解Nginx
- 解決代理超時問題的三種方法
- 解決SQL Server資料庫佔用記憶體過多的問題SQLServer資料庫記憶體
- 解決兩相同資料庫資料同步的問題 (轉)資料庫
- 資料庫層面問題解決思路資料庫
- nginx fastcgi 超時問題解決記錄NginxAST
- 如何診斷RAC資料庫上的“IPC Send timeout”問題?資料庫
- tomcat連線池配置,解決資料庫超時Tomcat資料庫
- 【分享】資料庫的熱點塊問題資料庫
- 解決AJAX應用,會話超時(Session Timeout)的問題,粗略方法(不考慮使用Filter的前提下)會話SessionFilter
- Atx可能要解決的問題
- MYSQL++ 資料庫連線超時的解決辦法LTMySql資料庫
- mysql資料庫連線過多的錯誤,可能的原因分析及解決辦法(轉)MySql資料庫
- DBeaver 資料匯入SQL時的問題SQL
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- oracle 資料庫解決問題思路總結Oracle資料庫
- 資料庫sql的優化問題的面試題資料庫SQL優化面試題
- Laravel5的資料庫表建立問題 資料庫遷移操作報錯問題解決Laravel資料庫