錯誤現象
錯誤訊息:「連線逾時」或「Connection Timeout Expired」。表示用戶端**已找到伺服器並嘗試建立連線**,但超過預設等待時間仍未完成交握。
常見原因
- 跨網段/Internet 連線,延遲高、頻寬低 (如遠端管理、VPN)。
- 區域網路擁塞、封包遺失、防火牆深度檢查導致延遲。
- SQL Server 負載過高,回應緩慢 (如長時間查詢阻塞、記憶體壓力)。
- 用戶端預設逾時值過短 (企業管理員 4 秒、查詢分析器 15 秒)。
解決方案:調整用戶端逾時設定
企業管理員
- 工具 → 選項 → 進階 索引標籤。
- 「連線設定」區塊 → 「登入逾時 (秒)」輸入較大值 (建議 20-30 秒)。
查詢分析器
- 工具 → 選項 → 連線。
- 將「登入逾時」設為較大值 (建議 30-60 秒)。
ADO/ADO.NET 連線字串
-- ADO (Classic ASP/VB6)
Conn.ConnectionTimeout = 30 ' 秒
-- ADO.NET (C#/VB.NET)
"Server=myServer;Database=myDB;User=sa;Pwd=***;Connection Timeout=30;"
進階排查清單 (調整逾時仍失效)
- 基本連通性:
ping <Server IP> 成功;telnet <IP> 1433 顯示空白閃爍游標 (TCP 連線成功)。
- IP 直連註冊:企業管理員 → 右鍵 SQL Server 群組 → 新增註冊 → 輸入 IP → SQL Server 驗證 → sa/密碼。
- 伺服器端 WinSock Proxy (舊版/特殊網路拓撲):
- 伺服器網路公用程式 → 啟用 WinSock Proxy → 代理位址填伺服器 IP、連接埠 1433。
- 用戶端別名設定:
- 用戶端網路公用程式 → 別名 → 新增 → 別名自訂、網路庫選 TCP/IP、伺服器名稱填遠端 IP/實例名。
- 防火牆/IDS/IPS:確認 1433 (TCP) 雙向放行;若為具名實例,需開放 SQL Browser (UDP 1434) 及動態連接埠範圍。
- SQL Server 錯誤記錄:檢視是否有「登入失敗」、「連線重置」、「記憶體不足」等訊息。
最佳實務建議
- 生產環境應用程式 **務必在連線字串明確設定 Connection Timeout** (建議 30 秒以上),勿依賴預設值。
- 長時間執行的查詢/批次作業,應調整 **Command Timeout** (非 Connection Timeout),避免執行中途被切斷。
- 監控伺服器
sys.dm_exec_connections、sys.dm_os_wait_stats,偵測連線建立延遲根因。