首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 故障診斷雙引擎:Windows 事件日誌 + ErrorLog 全景讀解指南

     編輯:關於SqlServer

診斷雙基石

  1. Windows 事件日誌:系統/應用程式/安全三大通道,反映 OS 與 SQL 服務級健康。
  2. SQL Server ErrorLog:資料庫引擎內部視角,記錄啟動、備份、損壞、記憶體、I/O、排程器、存取違規等核心事件。

一、Windows 事件日誌實戰

開啟方式

Win+R → eventvwr.msc

關鍵通道與來源

通道SQL 相關來源典型事件
SystemService Control Manager服務啟動/停止/崩潰 (Event ID 7036, 7034)
ApplicationMSSQLSERVER / MSSQL$InstanceName資料庫啟動、鎖頁面記憶體、嚴重錯誤 (Event ID 17111, 17112, 823, 824, 825)
SecuritySecurity-Auditing登入審計 (4624/4625)、特權使用

實戰案例:記憶體不足導致 SQL 緩慢

  • 事件:「系統記憶體不足,SQL Server 釋放記憶體」 (Event ID 17112 / 1789)。
  • 現象:32 位 OS 僅可用 4GB,SQL 目標記憶體 3.5GB,實際受限於 VAS 碎片化。
  • 對策:遷移至 64 位 OS、啟用 Lock Pages in Memory、設定 Max Server Memory 留足 OS 2-4GB。

匯出與跨時區分析

  • 右鍵通道 → 「儲存所有事件為」 → .evtx(保留結構)或 .txt/.csv(文本檢索)。
  • 時區陷阱:.evtx 以 UTC 存儲,打開機器時區不同會導致顯示時間偏移;跨時區分析請用 .txt 或統一轉 UTC 比對。

二、SQL Server ErrorLog 深度讀解

定位路徑

-- 方法 1:配置管理器 → SQL Server 服務 → 內容 → 進階 → 啟動參數 → -e 路徑
-- 方法 2:預設 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\ERRORLOG

預設保留 7 輪

重啟服務輪替,ERRORLOG (當前)、ERRORLOG.1 … ERRORLOG.6。可在配置管理器修改保留數量。

必讀 12 大內容類別

類別關鍵字 / Event ID行動
版本/啟動參數Microsoft SQL Server 2019, -T3608, -g512確認版本、啟動參數、啟用的 Trace Flag
資料庫啟動狀態Starting up database 'xxx', Recovery completed檢查是否有「Recovery failed」或長時間「In Recovery」
損壞/一致性DBCC CHECKDB, Msg 823/824/825, Torn page立即啟動損壞恢復流程
備份/還原BACKUP DATABASE, RESTORE DATABASE核對備份鏈完整性、還原點
記憶體壓力Memory clerk, Buffer pool, RESOURCE_SEMAPHORE調整 Max Memory、檢查計畫快取膨脹
排程器/Deadlocked SchedulerScheduler 0x... appears hung, Process Utilization 0%疑似 Hang,收集 Dump、檢查長時間運行查詢
I/O 延遲SQL Server has encountered 15 second I/O delay磁盤子系統瓶頸,檢查延遲、佇列深度、固件
存取違規Access Violation, EXCEPTION_ACCESS_VIOLATION引擎 Bug,收集 Dump 開 Microsoft Case
服務關閉SQL Server is terminating正常/異常關閉時間點

啟用額外資訊

-- 登入審計
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'AuditLevel', REG_DWORD, 3; -- 3 = 成功+失敗
-- 死鎖記錄 (Trace Flag 1222 輸出至 ErrorLog)
DBCC TRACEON(1222, -1); -- 全域
-- 或啟動擴充事件 xml_deadlock_report

ErrorLog 盲區(需結合事件日誌/擴充事件)

  • 阻塞鏈(未升級為死鎖/排程器問題)。
  • 普通慢查詢/逾時(無資源等待異常)。
  • OS 層網路/防火牆/AD 認證故障。

三、診斷標準流程 (SOP)

  1. 收到告警 → 先開 Event Viewer → System/Application,確認 OS/服務級異常時間點。
  2. 同步開 ErrorLog(當前 + 歷史),搜尋對應時間窗口關鍵字。
  3. 若 ErrorLog 乾淨 → 排查阻塞 (sp_WhoIsActive)、慢查詢 (Query Store/Plan Cache)、OS 資源 (PerfMon/Resource Monitor)。
  4. 定位根因 → 產出 RCA 文檔 → 落地防範措施(索引、配置、代碼、硬體)。

雙日誌交叉驗證,是從「現象」穿透到「本質」的最短路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved