首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 逾時錯誤全景排查:從檔案增長、連線設定到查詢優化

     編輯:MySQL 資料庫相關知識

    錯誤現象分類

    錯誤訊息典型來源核心原因
    Timeout expired (0x80040e31)應用程式插入/更新資料檔自動增長百分比導致大檔案擴展卡頓
    Login timeout / Connection timeout企業管理器、查詢分析器、應用連線預設 4s/15s 連線逾時過短
    Query timeout長跑查詢、大量排序/雜湊統計資訊過舊、缺索引、記憶體不足排隊

    場景一:資料檔自動增長導致寫入逾時

    徵兆: CPU/記憶體低載,事件日志出現 Autogrow cancelled/timed out after 453ms。
    根因: FILEGROWTH 設為百分比 (預設 10%),資料檔達 1GB+ 時單次擴展耗時超過指令逾時。
    修正: 改為固定 MB 增長:

    ALTER DATABASE MyDB MODIFY FILE (NAME=MyDB_Data, FILEGROWTH=256MB);

    場景二:用戶端連線逾時設定

    企業管理器

    工具 → 選項 → 進階 → 連線設定 → 登入逾時:改為 30 秒

    查詢分析器

    工具 → 選項 → 連線 → 登入逾時:30,連線逾時:0 (無限)

    應用程式 (ADO/ADO.NET)

    Conn.ConnectionTimeout = 30  ' 連線逾時秒數
    Cmd.CommandTimeout = 300     ' 指令執行逾時秒數,0=無限

    場景三:查詢執行逾時優化

    1. 更新統計資訊:UPDATE STATISTICS TableName; 或 sp_updatestats
    2. 建立/優化索引:針對 WHERE/JOIN/ORDER BY 欄位,避免掃描
    3. 改寫 SQL:避免 SELECT *、減少排序、拆分大查詢
    4. 調整查詢等待上限 (慎用):
      sp_configure 'show advanced options',1; RECONFIGURE;
      sp_configure 'query wait', 2147483647; RECONFIGURE;
    5. 擴充記憶體:排序/雜湊溢出到 tempdb 會嚴重拖慢

    硬體與網路層面

    • 網卡協商速率錯誤 (100Mbps vs 1Gbps) → 換線/換口/固定協商
    • 磁碟延遲高 (Avg. Disk sec/Read > 20ms) → 檢查 RAID 卡快取、遷移至 SSD
    • 防火牆/IDS 封包檢查導致延遲 → 白名單 SQL 流量
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved