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

SQL Server 查詢索引最後重建時間:透過統計資訊更新時間間接推估

     編輯:關於SqlServer

SQL Server **不直接記錄** 索引重建/重組時間。但 ALTER INDEX REBUILD 會同步更新統計資訊(等同 UPDATE STATISTICS WITH FULLSCAN),故可透過 STATS_DATE() 查詢統計資訊最後更新時間,作為索引維護時間的**近似參考**。

核心查詢

SELECT 
    OBJECT_NAME(object_id) AS TableName,
    name AS IndexName,
    STATS_DATE(object_id, stats_id) AS LastStatsUpdate
FROM sys.stats
WHERE name NOT LIKE '_WA%'  -- 排除系統自動建立的統計資訊
  AND OBJECTPROPERTY(object_id, 'IsMSShipped') = 0  -- 僅使用者資料表
ORDER BY TableName, IndexName;

重要限制與注意事項

  • 非精確對應:統計資訊更新觸發條件多樣(自動更新閾值、手動 UPDATE STATISTICS、sp_updatestats、索引重組**不**更新統計資訊)。
  • 重組不更新統計:ALTER INDEX REORGANIZE **不會** 更新統計資訊,故此法無法偵測重組操作。
  • 叢集索引統計 = 資料表統計:叢集索引的統計資訊即為資料表統計資訊,stats_id = index_id。
  • 篩選條件可調整:依需求加入 AND STATS_DATE(...) > '2024-01-01' 等時間窗。

更精確的替代方案

  1. Extended Events:捕獲 index_rebuild_started/completed、index_reorganize_started/completed 事件,精確記錄時間、持續時間、目標索引。
  2. 維護計畫記錄:msdb.dbo.sysmaintplan_log、sysmaintplan_logdetail 記錄維護計畫執行歷史。
  3. 自訂記錄表:在維護腳本中插入記錄(索引名、操作類型、開始/結束時間、頁數、碎片率)。

Extended Events 範例

CREATE EVENT SESSION IndexMaintenanceTracking ON SERVER
ADD EVENT sqlserver.index_rebuild_completed,
ADD EVENT sqlserver.index_reorganize_completed
ADD TARGET package0.event_file (SET filename = N'IndexMaint');
GO

總結

STATS_DATE 為零成本、即時可用的「近似指標」,適合快速巡檢;嚴格稽核或自動化報表請部署 Extended Events 或維護記錄機制。

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