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

SQL Server GETDATE() 與系統時間不同步現象分析

     編輯:關於SqlServer

現象描述

在 Windows 2000 + SQL Server 7.0 環境中,手動修改系統時間(如 12:00 → 13:00)後,立即呼叫 `GETDATE()` 仍回傳舊時間,約 30~60 秒後才同步。

原因分析

  • SQL Server 內部維護自己的時間快取,非即時讀取硬體時鐘
  • 時間同步機制依賴 Windows 計時器中斷,約每分鐘更新一次內部時間
  • 此為 SQL Server 7.0 已知行為,非 Bug

驗證與影響

  • 僅影響 `GETDATE()`、`CURRENT_TIMESTAMP` 等系統函數
  • 不影響交易記錄的 LSN 排序(LSN 由內部計數器產生)
  • 不影響排程作業執行時間(SQL Server Agent 獨立讀取系統時間)

解決方案與建議

  1. 勿在交易邏輯中仰賴毫秒級時間精度
  2. 若需高精度時間戳記,應用層自行取得系統時間寫入
  3. 生產環境建議啟用 NTP 時間同步,避免人工改時間
  4. 升級至 SQL Server 2000 SP4 或更新版本,時間處理機制已改善

補充測試腳本

-- 觀察同步延遲
DECLARE @t DATETIME, @i INT = 0
WHILE @i < 120
BEGIN
    SET @t = GETDATE()
    PRINT CONVERT(VARCHAR, @t, 114) -- 顯示 hh:mi:ss:mmm
    WAITFOR DELAY '00:00:01'
    SET @i = @i + 1
END
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved