Sql-Server

系統健康擴展事件文件如何滾動?

  • July 31, 2020

我看到 SQL Server 中的預設系統健康會話事件是 5 MB,每個事件總共有 4 個文件。

我們正在嘗試從歷史事件中的系統健康狀況中獲取數據,但對於一些關鍵的生產伺服器,它們只是快速滾動。對於一些人來說,他們甚至在那里呆了幾個星期

SQL Server 中滾動文件的機制是如何工作的,有沒有辦法可以檢查何時以及如何發生這種情況?

編輯@每個答案

  1. 事件未重新開始
  2. 伺服器也沒有重新啟動,它每月按計劃發生一次

因此,我認為系統執行狀況中可能會擷取很多不需要的事件。我怎樣才能在這個系統健康中找到它們並將它們過濾掉?

另外,我們應該增加文件大小,比如 200 MB 4 個文件,還是只保留 10 MB 80 個文件這樣的小文件?哪一個更好?

更新@我已經將此標記為答案,但是在檢查另一個彈出的內容時:

文件未按順序填寫;假設我增加到 10 個文件,每個文件 10 MB。我們看到幾天前的 1-6 個文件似乎都裝滿了 10 MB,而同一天的文件 7 和 8 是 2 MB,文件 9 和 10 完全裝滿了 10 MB。我想這是意料之中的,只是好奇為什麼會這樣?

滾動文件的 SQL Server 中的機制是如何工作的

當發生以下任何情況時,文件將翻轉:

  • 文件達到其最大大小(在本例中為 5 MB)
  • XE 會話因任何原因停止並重新啟動

這可能是實際執行命令的人:

ALTER EVENT SESSION [session_name]  
ON SERVER  
STATE = STOP;

或者可能是伺服器或 SQL Server 實例已重新啟動(這似乎不太可能,因為您提到這是一個關鍵的生產伺服器)。


有沒有辦法可以檢查何時以及如何發生這種情況?

如果您的所有文件都在 5 MB 左右,那麼您的伺服器只是在生成大量事件。我有一個不是很忙的生產伺服器,用 5 MB 的事件填充 4 個 XE 文件之一仍然需要不到 24 小時。這是一個螢幕截圖,查看這些文件的修改日期:

顯示 system_health XE 日誌的 Windows 資源管理器螢幕截圖

要查看 SSMS 中的事件會話中包含哪些事件,您可以轉到管理 → 擴展事件 → 會話 → 右鍵點擊“system_health”並選擇“腳本會話為”→“創建到”→“新查詢編輯器視窗”。

但是,請注意 Microsoft 文件文章Use the system_health Session中的這一點:

我們建議您不要停止、更改或刪除系統執行狀況會話。

因此,您最好的選擇是創建一個新的 XE 會話,其中僅包含您想要的事件子集,以及適用於您系統的特定事件文件目標設置。

如果文件小於 5 MB,則伺服器或事件會話正在重新啟動。您可以檢查 SQL Server 錯誤日誌以了解何時發生重新啟動,如果出現這種情況,您必須與具有 CONTROL SERVER 權限的人員核實一下誰在停止 XE 會話。


另外,我們應該增加文件大小,比如 200 MB 4 個文件,還是只保留 10 MB 80 個文件這樣的小文件?哪一個更好?

這取決於。 從一堆不同的文件中*查詢(讀取)可能很不方便。*所以我傾向於減少文件的總數,而只是增加每個文件的大小。

話雖如此,我從未嘗試過解析非常大的 XE 文件,因此可能存在問題。您必須進行測試,看看哪一個更適合您的系統。

引用自:https://dba.stackexchange.com/questions/230689