1. 簡介 SQL Server 輪廓
1.1 什麼是 SQL Server 分析器以及我們為什麼需要它?
SQL Server Profiler 是一個圖形使用者介面工具,用於監視和捕捉在系統中發生的事件 SQL Server這款強大的診斷工具使資料庫管理員和開發人員能夠即時觀察資料庫引擎活動,幫助識別效能瓶頸、排查應用程式問題和稽核安全事件。
1.2 SQL Server 2025 年的 Profiler:現況與替代方案
微軟已棄用 SQL Server 分析器從…開始 SQL Server 2016年,建議 擴展活動 作為替代技術。然而,該工具目前仍然可用。 SQL Server 版本包括 SQL Server 2022 年,仍被資料庫專業人士廣泛使用。
1.3 本指南的適用對象
- 本指南適用於需要監控 SQL Server 實例、診斷效能問題並確保系統可靠性。 DBA 將找到擷取追蹤、分析事件和實施監控策略的實用指南。
- 應用程式開發人員受益於了解他們的程式碼如何與 SQL Server。 SQL Profiler 可協助開發人員識別低效的查詢、驗證應用程式行為並偵錯與資料庫相關的錯誤。
- 效能分析師和顧問將探索用於工作負載分析、容量規劃和系統最佳化的高級技術。全面的追蹤配置、篩選和分析功能可實現全面的資料庫效能評估。
2.理解 SQL Server Profiler 基礎知識
2.1 如何 SQL Server Profiler 作品
SQL Server Profiler 作為一個客戶端應用程式運行,連接到在 SQL Server。建立追蹤時,資料庫引擎會監視指定的事件並根據您的配置擷取它們。如果配置正確,追蹤引擎會收集事件數據,對伺服器效能的影響最小。
底層 SQL Trace 基礎架構在整個資料庫引擎中使用輕量級事件鉤子。當發生與您的追蹤定義相符的事件時,引擎會捕獲相關訊息,並將其傳送到 Profiler 介面或儲存到檔案或表中。這種架構允許靈活地收集數據,而無需修改應用程式程式碼。
2.2 關鍵概念和術語
2.2.1活動
事件代表特定事件 SQL Server 追蹤引擎可以捕捉的事件。每個事件對應特定的資料庫操作或系統活動。 SQL Server Profiler 將事件組織成邏輯類別,以便於設定。
常見的事件類別包括用於查詢執行的 TSQL、用於程序呼叫的預存程序、用於並發監控的鎖定以及用於異常追蹤的錯誤和警告。選擇合適的事件決定了追蹤捕獲的信息,並直接影響追蹤的實用性和效能開銷。
了解事件類型有助於您配置有效的追蹤。 RPC:Completed 事件捕獲遠端程序呼叫完成情況,SQL:BatchCompleted 事件追蹤臨時查詢批次,Lock:Deadlock 事件識別死鎖發生情況。請選擇與您的特定故障排除或監控目標相符的事件。
2.2.2 資料列
資料列定義了追蹤捕獲的每個事件的資訊。常見欄位包括:TextData(表示實際 SQL 語句)、Duration(表示執行時間)、CPU(表示處理器使用率)、Reads(表示邏輯磁碟讀取)和 Writes(表示邏輯磁碟寫入)。
必需的列因用例而異。效能故障排除通常需要「持續時間」、「CPU」、「讀取次數」和「寫入次數」列。安全審計需要「登入名稱」、「資料庫名稱」和「物件名稱」欄位。應用程式偵錯則受益於「應用程式名稱」、「SPID」和「錯誤」欄位。
僅選擇必要的列可以減少追蹤開銷並簡化分析。除非特別需要,否則請避免捕獲所有可用列。每增加一列都會增加收集和處理的資料量,這可能會影響伺服器效能。
2.2.3過濾器
過濾器會根據指定的條件限制追蹤捕獲的事件。正確配置的過濾器可以顯著減少追蹤量,使分析更易於管理,並最大限度地降低效能影響。過濾器會在捕獲先前評估事件數據,從而避免不必要的數據收集。
常見的篩選條件包括:DatabaseName(用於關注特定資料庫)、ApplicationName(用於隔離特定應用程式)、Duration(用於僅捕獲慢速操作)以及 LoginName(用於追蹤特定使用者)。組合使用多個篩選條件可以建立精確的追蹤定義,從而準確地捕捉您所需的資訊。
對於生產環境而言,注重性能的過濾至關重要。請務必按資料庫名稱或應用程式名稱進行過濾,以避免擷取系統活動。設定最小持續時間閾值以忽略快速執行的查詢。請謹慎使用文字資料 (TextData) 過濾器,因為它們需要進行字串比較,這會增加開銷。
2.2.4 追蹤模板
追蹤範本為常見場景提供預先配置的事件、列和篩選器選擇。 SQL Server Profiler 內建了多個模板,可作為建立追蹤的起點。自訂範本可儲存您的配置,以便在多個追蹤工作階段中重複使用。
標準範本可擷取一組適用於基本監控的常規事件。 TSQL 範本專注於以最小開銷執行查詢。優化模板專門收集用於資料庫引擎優化顧問分析的事件。每個模板都在資訊擷取和效能影響之間取得平衡。
建立自訂範本可以節省時間並確保追蹤會話之間的一致性。使用您偏好的事件、列和篩選器配置跟踪,然後將其儲存為範本。當您反覆排查類似問題時,自訂範本特別有用。
3. 開始使用 SQL Server 輪廓
3.1 系統要求和先決條件
SQL Server Profiler 捆綁了 SQL Server Management Studio 並支援所有目前維護 SQL Server 版本,來自 SQL Server 2016 2022來。
權限要求決定誰可以建立和運行追蹤。 sysadmin 固定伺服器角色的成員可以不受限制地訪問 SQL Server 分析器功能。對於非系統管理員用戶,ALTER TRACE 權限授予建立和管理追蹤的能力。
追蹤遠端伺服器時需要考慮網路因素。客戶端追蹤需要您的工作站與 SQL Server 實例。中斷的連線會停止客戶端跟踪,可能會遺失捕獲的資料。伺服器端追蹤完全在資料庫伺服器上運行,從而避免了此限制。
3.2 如何啟動 SQL Server 輪廓
3.2.1 從 SQL Server 管理工作室(SSMS)
請依照以下步驟啟動 SQL Server SSMS 的分析器:
- 未結案工單 SQL Server Management Studio 並連接到任何 SQL Server 實例。
- 在操作欄點擊 工具 頂部功能表列中的選單。
- 選擇 SQL Server 輪廓 從下拉菜單中選擇。
- 这 SQL Server Profiler 應用程式在新視窗中開啟。
3.2.2 從 Windows 開始功能表啟動
位置 SQL Server 使用下列步驟直接從 Windows 進行 Profiler:
- 按一下 Windows 開始 按鈕。
- 類型 SQL Server 輪廓 在搜索框中。
- 選擇 SQL Server 輪廓 來自搜索結果。
- 應用程式啟動時沒有活動連線。
或者,透過「開始」功能表層級結構進行導覽:
- 打開 開始 菜單。
- 找到 Microsoft微軟 SQL Server 工具 文件夾中。
- 展開資料夾並點擊 SQL Server 輪廓.
3.2.3 連接到 SQL Server 實例
發射後 SQL Server Profiler,請依照以下步驟建立連線:
- 點擊 文件 在菜單欄中。
- 選擇 新蹤跡 從下拉菜單中選擇。
- 这 連接到服務器 出現對話框。
- 在 服務器名稱 領域。
- 選擇 Windows 驗證 or SQL Server 認證.
- 如果使用 SQL Server 身份驗證,輸入您的登入憑證。
- 點擊 連結 建立連接。
對於遠端連接,請指定完整的伺服器名稱,如果適用,請包含實例名稱。對於命名實例,請使用 SERVERNAME\INSTANCENAME 格式。如果連線嘗試失敗,請檢查網路連線和防火牆設定。
4.創建和配置 SQL Server 痕跡
4.1 使用範本建立您的第一條軌跡
使用以下步驟建立您的第一個追蹤:
- 發佈會 SQL Server 探查器。
- 點擊 文件 -> 新蹤跡 並連接到目標伺服器。
- 这 追蹤屬性 出現對話框。
- 在 軌跡名稱 領域。
- 從中選擇一個模板 使用模板 落下。
- 選擇 標準(默認) 用於常規監控的模板。或用於其他用途的另一個模板。此範本為常見場景提供了預先配置的事件、列和篩選器。
- 點擊 運行 立即開始記錄事件。
4.2 自訂您的軌跡
很多時候,模板無法滿足您的要求。在這種情況下,您可以完全自訂您的追蹤:
- 在 追蹤屬性 對話。
- 點擊 空白筆記 模板來自 使用模板 落下。
- 在操作欄點擊 活動選擇 選項卡,現在您可以根據需要自訂所有事件、資料列和篩選器。我們將在以下部分中討論它們。
4.3 選擇要擷取的事件
您可以在 活動選擇 標籤:
- 在操作欄點擊 + 圖標來展開它。
- 點擊事件旁邊的複選框以選擇它。
4.3.1 了解事件類別
SQL Server 分析器將事件按邏輯分組,並按類別組織。 「預存程序」類別包含預存程序執行事件,例如 SP:Starting、SP:Completed 和 SP:StmtCompleted。這些事件追蹤預存程序呼叫以及過程中各個語句的執行情況。
TSQL 類別擷取臨時查詢的執行情況,事件包括 SQL:BatchStarting 和 SQL:BatchCompleted。這些事件追蹤直接提交到 TSQL 的查詢。 SQL Server 儲存過程之外。
「鎖」類別監視與並發相關的事件,包括「鎖:取得」、「鎖:釋放」、「鎖:死鎖」和「鎖:逾時」。使用這些事件來診斷影響應用程式效能的阻塞和死鎖問題。
錯誤和警告類別捕獲異常事件,包括異常、注意和使用者錯誤訊息。這些事件有助於識別應用程式錯誤和 SQL Server 追蹤會話期間的警告。
4.3.2 為您的場景選擇正確的事件
效能監控需要捕獲資源消耗的事件。選擇“RPC:Completed”和“SQL:BatchCompleted”來追蹤查詢執行情況。新增「Duration」、「CPU」、「Reads」和「Writes」列來衡量資源使用情況。這些事件為識別效能瓶頸奠定了基礎。
安全審計需要追蹤身份驗證和授權的事件。選擇「稽核登入」、「稽核登出」、「稽核登入失敗」和「物件:已開啟」來監控資料庫存取。新增「登入名稱」、「資料庫名稱」和「物件名稱」列,以識別哪些人存取了哪些資源。
調試場景受益於全面的事件捕獲。包括預存程序事件、SQL 批次事件和錯誤事件,以追蹤完整的執行流程。使用 SPID、ApplicationName 和 HostName 欄位擷取更多上下文訊息,以便將事件與特定會話關聯起來。
4.4 配置資料列
預設情況下,當您選擇事件時,其所有資料列都會被選取(勾選)。您可以取消選擇不必要的列,以減少開銷並簡化分析:
每個追蹤記錄都包含一些關鍵列,例如 EventClass(用於標識事件類型)、TextData(用於擷取實際的 SQL 語句)、LoginName(用於標識執行使用者)和 StartTime(用於記錄事件發生的時間戳記)。這些列為每個捕獲的事件提供了基本的上下文資訊。
與效能相關的欄位用於衡量資源消耗。 「持續時間」表示事件耗時(以微秒為單位)。 「CPU」顯示處理器時間(以毫秒為單位)。 「讀取次數」統計邏輯頁面讀取次數。 「寫入次數」追蹤邏輯頁面寫入次數。這些指標用於識別需要最佳化的資源密集型操作。
安全性和審計列追蹤資料存取模式。 DatabaseName 標識存取了哪個資料庫。 ObjectName 指定所涉及的表或物件。 ApplicationName 揭示了哪個應用程式啟動了該活動。這些列共同提供了全面的審計線索。
4.5 設定濾波器以降低噪音
4.5.1 通用過濾條件
使用以下方法配置過濾器:
- 打開 追蹤屬性 對話。
- 在操作欄點擊 活動選擇 標籤。
- 點擊 列過濾器 右下角的按鈕。
- 從左側清單中選擇一列。
- 在右側面板中配置過濾條件。
- 點擊 OK 應用過濾器。
套用名稱過濾器會將活動與特定應用程式隔離。展開篩選器對話方塊中的「應用程式名稱」列,在 Like 領域,以及 SQL Server Profiler 僅捕獲來自該應用程式的事件。在排查特定應用程式的問題時,此過濾器非常有用。
資料庫名稱篩選器可將擷取限制在特定資料庫。依資料庫名稱篩選可排除系統資料庫活動,並專注於應用程式資料庫。在 Like or 等於 欄位取決於您是否需要通配符匹配。
持續時間過濾器僅可捕捉運作緩慢的操作。在 大於或等於 字段。例如,設定 Duration >= 1000 僅捕獲持續時間超過一秒的事件,從而過濾掉快速執行的查詢。
使用者名稱過濾器可追蹤特定使用者的活動。透過登入名稱進行過濾,即可監控特定資料庫使用者。此方法有助於識別哪些使用者執行了有問題的查詢或存取了敏感資料。
4.4.2 過濾最佳實踐
有效的過濾機制能夠平衡資料採集和效能影響。請務必至少套用一個過濾器,以防止採集過多的系統活動。對於大多數跟踪,資料庫名稱和應用程式名稱過濾器應該是您的首選。
在生產環境中,應避免使用過於寬泛的追蹤記錄。未經篩選的追蹤記錄會捕獲海量數據,可能降低伺服器效能並使分析變得不切實際。請設定針對故障排除目標的特定篩選條件。
在部署到生產環境之前測試過濾器。首先針對開發或測試環境運行跟踪,以驗證過濾器是否能夠捕獲預期事件,且不會產生過多開銷。根據捕獲的資料量調整過濾條件。
4.5 使用追蹤模板
4.5.1 內建模板概述
標準範本提供均衡的事件擷取功能,適用於常規監控。它包含常見的查詢執行事件、預存程序呼叫和基本的錯誤追蹤。如果您需要全面的可視性,但又不知道具體要查找哪些內容,請使用此範本。
TSQL 範本專注於查詢執行,並盡量減少事件選擇。它捕獲 SQL:BatchCompleted 和 RPC:Completed 事件,其中包含效能分析所需的必要列。此範本的開銷低於標準範本。
優化範本可優化資料庫引擎優化顧問分析的事件選擇。它捕獲工作負載分析和索引建議所需的事件和列。在準備用於自動效能最佳化的追蹤時,請使用此範本。
TSQL_Replay 範本包含追蹤重播功能所需的所有事件和欄位。它捕獲全面的執行詳細信息,使您能夠在測試環境中重現捕獲的工作負載。由於資料收集量大,此範本會產生更大的追蹤文件。
4.5.2 建立自訂模板
請依照下列步驟建立自訂範本:
- 點擊 文件 -> 模板 -> 新模板…
- 在 新模板名稱 領域。
- (可選)檢查 基於現有模板的新模板 如果您不想從頭開始構建,請選擇現有範本:
- 在操作欄點擊 事件選擇 選項卡,使用您想要的事件、列和過濾器自訂追蹤模板,就像您 用正常的軌跡做.
- 點擊 節省 儲存模板。
匯出範本以便與團隊成員共用或用於備份:
- 點擊 文件 -> 模板 -> 導出模板.
- 選擇您想要匯出的範本。
- 導航到您想要的儲存位置。
- 輸入文件名並單擊 節省.
- 共享 *.tdf 檔案 (SQL Server Profiler 範本檔案)與其他 SQL Server Profiler 用戶。
4.6 保存追蹤輸出
默認情況下, SQL Server Profiler 會在追蹤視窗中顯示事件,但不會儲存它們。您可以選擇將追蹤資料儲存到檔案或表中 追蹤屬性 建立新軌跡時出現的對話方塊。
4.6.1 儲存到文件
- 在 追蹤屬性 對話框,檢查 儲存到文件.
- 按一下資料夾圖示以開啟文件瀏覽器。
- 導航到您想要的儲存位置。
- 輸入副檔名為 .trc 的檔名。
- 點擊 節省.
- 套裝 設定最大檔案大小 限制單一檔案的大小。
- 啟用 啟用檔案翻轉 建立多個文件。
- 可選啟用 伺服器處理追蹤數據 用於伺服器端追蹤。
檔案大小管理可防止磁碟空間耗盡。根據可用磁碟空間和預期追蹤時長,將最大檔案大小設定為合理的值,例如 500 MB 或 1 GB。當達到大小限制時,文件滾動更新功能會自動建立新文件,並在文件名稱後面附加一個數字。
4.6.2 儲存到表
- 在 追蹤屬性 對話框,檢查 儲存到表.
- 这 目標表 出現對話框。
- 從中選擇伺服器 伺服器 落下。
- 從中選擇資料庫 數據庫 落下。
- 選擇現有表或在 枱燈 領域。
- 點擊 OK 確認。
- 可選設定 設定最大行數 限製表格大小。
保存到表格時需要考慮性能因素。與檔案儲存相比,表格儲存會帶來額外的開銷,因為 SQL Server 必須透過儲存引擎寫入追蹤資料。當需要使用 T-SQL 立即查詢追蹤資料時,請使用表格儲存。
對於基於表格的追蹤數據,數據保留至關重要。設定最大行數限制,以防止表變得過大。定期歸檔或刪除舊的追蹤資料以保持效能。考慮對大型追蹤表進行分區,以提高可管理性。
5. 運作和管理 SQL Server 痕跡
5.1 啟動、暫停和停止跟踪
使用工具列按鈕管理追蹤執行:
- 綠色的 開始 按鈕開始根據您的配置捕獲事件。
- 點擊 暫停 在不斷開連接的情況下暫時停止資料採集。
- 點擊 停止 結束追蹤並關閉連線。
透過選單項目:
透過右鍵單擊追蹤視窗中的任何條目:
追蹤生命週期管理會影響伺服器資源。活動追蹤會消耗與捕獲事件量成正比的記憶體和處理能力。在不需要監控的時間段內暫停追蹤以減少開銷。分析完成後,請完全停止追蹤以釋放資源。
客戶端追蹤需要活動的 Profiler 連線。關閉 SQL Server Profiler 視窗會立即停止客戶端追蹤。請最小化 Profiler 視窗(而不是關閉它),以便在使用其他應用程式時保持追蹤運行。
5.2 即時追蹤監控
在主追蹤視窗中即時監控捕獲的事件。每一行代表一個事件,每一列顯示事件屬性。網格在追蹤活動期間持續更新,預設情況下,最新事件顯示在底部。
透過觀察事件頻率和特徵來識別模式和問題。持續時間較長的事件表示存在效能問題。頻繁的錯誤事件表示應用程式存在問題。異常的登入活動可能預示著安全性問題。即時監控能夠立即回應新出現的問題。
捲動已擷取的事件以檢查特定事件。點擊任何行即可選擇事件並查看其完整詳情。雙擊事件即可開啟顯示所有列值的詳細屬性對話方塊。使用滾動鎖定功能可防止在查看歷史事件時自動捲動。
5.3 管理多個並發跟踪
同時運行多個追蹤功能可為複雜的監控場景提供靈活性。您可以為資料庫活動的不同方面建立單獨的跟踪,例如,一個追蹤用於效能監控,另一個追蹤用於安全審計。每個追蹤均獨立運行,並具有各自的配置。
在多個追蹤記錄下,資源分配變得至關重要。每個活動追蹤記錄都會消耗記憶體、CPU 以及潛在的磁碟 I/O。請限制並發追蹤記錄的數量,並確保每個追蹤記錄使用合適的篩選器,以最大程度地降低開銷。在執行多筆追蹤記錄時,請監控伺服器效能。
協調追蹤時間,避免高開銷追蹤重疊。如果可能,請在活動較少的時段執行資源密集型追蹤。將不同的追蹤安排在不同的時間,而不是同時執行所有追蹤。
5.4 客戶端追蹤與伺服器端追蹤
預設情況下,新創建的跟踪是客戶端跟踪,需要來自 SQL Server Profiler 與資料庫伺服器連線。如果連線中斷或 Profiler 關閉,追蹤將立即停止。
您還可以創建伺服器端跟踪,它完全在 SQL Server 實例,無需活動 Profiler 連線。伺服器端追蹤即使在關閉後仍會繼續運行 SQL Server Profiler,將資料寫入指定的檔案位置。
要建立伺服器端追蹤:
- 點選檔案->新建追蹤...
- 在 追蹤屬性 對話框,檢查 儲存到文件
- 設定文件位置和其他設定。
- 啟用 伺服器處理追蹤數據 創建伺服器端追蹤。
不同追蹤類型對效能的影響差異顯著。客戶端追蹤必須透過網路將資料傳輸到 Profiler 接口,這會增加延遲和頻寬消耗。伺服器端追蹤的開銷較小,因為資料直接寫入伺服器磁碟。
使用客戶端追蹤進行臨時故障排除、快速診斷以及需要即時視覺化回饋的場景。選擇伺服器端追蹤進行生產監控、長時間運行的擷取以及需要無人值守運行的場景。
6. 分析 SQL Server 探查器數據
6.1 開啟並查看已儲存的軌跡
使用以下步驟載入已儲存的追蹤檔案:
- 發佈會 SQL Server 探查器。
- 點擊 文件 -> 未結案工單 -> 追蹤文件.
- 導航到追蹤文件位置。
- 選擇 .trc 檔案並點擊 未結案工單.
- 追蹤資料載入到主視窗。
請依照以下步驟載入追蹤表:
- 點擊 文件 -> 未結案工單 -> 追蹤表.
- 連接到託管追蹤表的伺服器。
- 從中選擇資料庫 數據庫 落下。
- 從中選擇表 枱燈 落下。
- 點擊 OK 載入數據。
6.2 篩選與搜尋軌跡數據
6.2.1 後期採集過濾
使用以下步驟將過濾器應用於載入的追蹤資料:
- 點擊 編輯 -> 發現 或按 按Ctrl + F.
- 在 查找內容 領域。
- 從中選擇要搜尋的列 在看 落下。
- 點擊 查找下一個“ 找到符合的事件。
基於列的過濾功能可最佳化顯示的數據,無需重新擷取事件。右鍵單擊任意列標題,然後從上下文選單中選擇過濾選項。輸入過濾條件即可僅顯示符合的行。此方法可隱藏不相關的事件,進而加快分析速度。
6.2.2 尋找特定事件
搜尋功能可協助您在大型追蹤檔案中定位特定事件。使用「尋找」對話方塊可依文字內容、事件類型或列值進行搜尋。正規表示式可在需要時啟用複雜的搜尋模式。
為重要事件添加書籤,以便在分析過程中快速參考。右鍵單擊感興趣的事件,然後選擇書籤選項即可標記。使用鍵盤快速鍵或選單指令在書籤之間導航,方便比較相關事件。
6.3 分組和聚合事件
按列值將事件分組,以識別模式並彙總活動。右鍵單擊任意列標題,然後選擇 按此列分組 整理事件。分組檢視可將類似事件折疊在一起,讓您更輕鬆地查看整體模式。
聚合視圖提供追蹤資料的統計摘要。依文字資料分組可查看每個查詢的執行次數。按登入名稱分組可查看每個使用者的活動摘要。聚合功能可以揭示詳細事件清單中難以立即發現的模式。
展開和折疊分組,即可深入查看特定類別。點擊分組標題旁的加號和減號圖標,即可顯示或隱藏分組事件。這種層級視圖有助於自上而下的分析,從高層模式入手,逐步深入細節。
6.4 從追蹤中提取 SQL 查詢
請依照以下步驟從追蹤資料中提取查詢:
- 在追蹤網格中找到感興趣的查詢。
- 按一下該行以選擇事件。
- 在底部面板中查看完整的查詢文字。
- 媒體中心 按Ctrl + A 選擇所有查詢文字。
- 媒體中心 按Ctrl + C 複製查詢文字。
- 將查詢貼到 Management Studio 中以進行進一步分析。
透過按效能列排序來識別有問題的查詢。點選「時長」列標題可依執行時間排序。最慢的查詢會根據排序方向顯示在頂部或底部。同樣,按 CPU、讀取次數或寫入次數排序可以識別佔用大量資源的操作。
透過將查詢從追蹤複製到查詢視窗來匯出測試。修改提取的查詢以測試最佳化策略。比較原始版本和最佳化版本之間的執行計劃和效能指標。
6.5 關聯事件並瞭解執行流程
父子事件關係展現了執行層次結構。 SQL:BatchStarting 事件是 SQL:StmtStarting 事件的父親事件,而 SQL:StmtStarting 事件又是程序執行事件的父事件。理解這些關係有助於追蹤程式碼的完整執行路徑。
事務追蹤跨時間關聯相關事件。使用 SPID 欄位按會話對事件進行分組。在會話中,事件會依時間順序發生,顯示操作的順序。此視圖揭示了不同操作在事務內的互動方式。
透過檢查共享列值來關聯事件。具有相同 SPID 的事件發生在同一會話中。具有相同 ApplicationName 的事件來自同一應用程式。使用這些關聯來理解複雜的執行場景。
7。 共同 SQL Server 分析器用例
7.1 性能故障排除
7.1.1 識別慢查詢
使用以下配置捕獲慢查詢:
- 使用 TSQL 模板。
- 在 活動選擇 標籤,驗證 SQL:批次完成 以及 RPC:已完成 被選中。
- 點擊 列過濾器.
- 選擇 租期 從列列表中。
- 在 大於或等於 欄位來擷取耗時超過 1 秒的查詢。
- 點擊 OK 並開始跟踪。
- 在使用高峰期運行追蹤。
- 停止追蹤並按持續時間排序以確定最慢的查詢。
基於持續時間的分析揭示了執行時間模式。按「持續時間」欄位對擷取的事件進行排序,以便優先查看運行時間最長的操作。檢查這些事件的「文字資料」列,以識別導致延遲的實際查詢。
CPU 和 I/O 密集型查詢需要不同的最佳化方法。依 CPU 欄位排序可尋找需要演算法改進的處理器密集型查詢。依讀取或寫入列排序可識別可從索引或查詢重寫中受益的 I/O 密集型查詢。
7.1.2 偵測阻塞和死鎖
請依照下列步驟配置阻塞檢測:
- 建立新的軌跡。
- 在 活動選擇 選項卡,展開 鎖.
- 選擇 鎖:死鎖 以及 鎖:死鎖鏈.
- 拓展 錯誤和警告.
- 選擇 阻塞進程報告.
- 包括列: SPID, 文字數據, 數據庫名稱, 登入名.
- 啟動追蹤並監控鎖定事件。
鎖定事件監控揭示了影響應用程式效能的並發問題。 Lock:Deadlock 事件指示何時 SQL Server 偵測並解決死鎖情況。鎖:死鎖鏈事件顯示涉及死鎖的進程。
死鎖圖提供死鎖場景的可視化表示。當發生死鎖事件時,TextData 欄位會包含描述死鎖的 XML 檔案。複製此 XML 檔案並在 SQL Server Management Studio 檢視圖形死鎖圖,顯示哪些進程會互相阻塞。
7.1.3 尋找缺少的索引
使用下列步驟擷取索引分析的工作負載:
- 使用 調音 模板。
- 配置追蹤以儲存到檔案。
- 在代表性工作負載期間運行追蹤。
- 收集至少幾個小時的活動。
- 停止追蹤並保存檔案。
- 啟動資料庫引擎優化顧問。
- 選擇追蹤檔案作為工作負載來源。
- 運行分析以接收索引建議。
與資料庫引擎調優顧問整合可自動推薦索引。調優顧問會分析捕獲的工作負載,並建議能夠提升效能的索引。實施前請仔細檢視建議,並考慮儲存開銷和維護成本。
7.2 應用程式故障排除
7.2.1 調試應用程式錯誤
使用此配置追蹤應用程式錯誤:
- 建立新的軌跡。
- 拓展 錯誤和警告 在事件選擇標籤中。
- 選擇 例外, 使用者錯誤訊息以及 注意.
- 包括列: 錯誤, 文字數據, 應用程式名稱, SPID.
- 搜尋範圍 應用程式名稱 專注於您的申請。
- 啟動追蹤並重現錯誤場景。
- 查看捕獲的錯誤事件以獲取診斷資訊。
錯誤追蹤揭示了應用程式中經常隱藏的異常細節。 “錯誤”列包含 SQL Server 錯誤編號。 TextData 列顯示錯誤訊息以及導致錯誤的查詢。 Severity 欄位指示錯誤嚴重程度等級。
異常監控可擷取執行時間問題,包括約束違規、權限錯誤和逾時事件。將錯誤事件與先前的查詢事件關聯起來,以了解觸發異常的原因。
7.2.2 追蹤應用程式到資料庫的通信
請依照以下步驟監控應用程式活動:
- 使用 標準版 模板。
- 點擊 列過濾器.
- 選擇 應用程式名稱 並在 Like 領域。
- 可選篩選條件 主機名稱 隔離特定的伺服器。
- 在應用程式運行期間啟動追蹤。
- 查看捕獲的事件以查看所有資料庫互動。
應用程式名稱過濾將查詢與特定應用程式隔離。 SQL Server 透過連接字串設定應用程式名稱,從而輕鬆在多應用程式環境中追蹤單一應用程式。請確保您的連接字串包含“應用程式名稱”參數,以便進行有效過濾。
連線追蹤顯示會話生命週期,包括登入、查詢執行和登出事件。監控連線創建率以識別連線池問題。過多的連接流失表明潛在的應用程式配置問題。
7.2.3 驗證應用程式行為
使用追蹤分析驗證預期的應用程式行為。擷取業務事務期間的所有資料庫操作,並驗證正確的查詢是否按正確的順序執行。將實際捕獲的查詢與預期行為進行比較,以識別差異。
參數驗證可確保應用程式向預存程序和參數化查詢傳遞正確的值。檢查捕獲的查詢文本,以驗證參數值是否符合預期。錯誤的參數通常會導致邏輯錯誤,從而導致錯誤的業務結果。
7.3 安全審計
7.3.1 監控登入嘗試
使用以下步驟設定登入監控:
- 建立新的軌跡。
- 拓展 安全審計 在事件選擇標籤中。
- 選擇 審計登入, 審計註銷以及 審計登入失敗.
- 包括列: 登入名, 主機名稱, 應用程式名稱, 開始時間.
- 啟動追蹤以監控身份驗證活動。
- 審查失敗的登入事件以發現潛在的安全性問題。
成功和失敗的登入可提供全面的身份驗證追蹤。 「審核登入」事件記錄成功的身份驗證嘗試,包括使用者身分和來源資訊。 「審核登入失敗」事件指示可能表示攻擊或設定問題導致的登入嘗試失敗。
身份驗證追蹤可以揭示資料庫存取的模式。監控登入頻率以偵測異常活動。多次登入失敗後再次成功登入可能表示憑證已被盜用。從意外位置登入失敗的情況需要調查。
7.3.2 追蹤資料存取和修改
使用此組態監控資料存取:
- 建立新的軌跡。
- 拓展 安全審計.
- 選擇 審計資料庫對象訪問.
- 包括列: 物件名稱, 登入名, 文字數據, 數據庫名稱.
- 搜尋範圍 物件名稱 監控特定的敏感表。
- 啟動追蹤以捕獲存取嘗試。
SELECT、INSERT、UPDATE、DELETE 追蹤提供全面的資料修改審計。使用適當的篩選器擷取 SQL:BatchCompleted 事件,以監控所有資料存取操作。按 ObjectName 或 TextData 過濾,以專注於敏感表。
敏感資料存取需要仔細監控,以確保符合安全策略。專門為包含個人資訊、財務資料或其他機密資訊的表格建立追蹤。定期審查存取模式,以識別不當的資料存取。
透過分析擷取的追蹤記錄中的查詢模式來偵測可疑活動。尋找與正常應用程式行為不符的異常查詢。不包含 WHERE 子句且檢索整個資料表的 SELECT 語句可能表示有資料外洩嘗試。
權限提升嘗試會顯示為權限錯誤或執行管理指令的嘗試。監控嘗試存取系統表、修改伺服器設定或建立特權帳戶的查詢。篩選錯誤事件並檢查 TextData 列中是否有可疑活動。
7.4 容量規劃與工作負載分析
透過捕捉正常運作期間的代表性工作負載來建立基準。在典型工作時間內運行跟踪,以了解標準活動模式。將這些追蹤保存為性能基準,以供將來比較。
峰值使用情況識別可揭示系統何時承受最大負載。捕捉不同時間段的軌跡,包括工作時間、批次時段以及下班後的活動。分析事件計數和資源消耗,以識別峰值時段。
資源利用率模式源自於工作負載分析。按時間間隔分組事件,以了解全天的活動分佈。計算聚合 CPU、磁碟 I/O 和持續時間指標,量化資源消耗。利用這些數據規劃容量升級或發現最佳化機會。
8。 高級 SQL Server 分析器技術
8.1 使用 T-SQL 建立伺服器端追蹤
8.1.1 使用 sp_trace_create 和相關流程
使用 T-SQL 預存程序以程式設計方式建立伺服器端追蹤。此方法可實現自動追蹤建立和管理,無需 SQL Server Profiler 的圖形介面。
使用此範例程式碼定義伺服器端追蹤:
- 聲明追蹤 ID 和檔案路徑的變數。
- 呼叫 sp_trace_create 來建立新的追蹤。
- 使用 sp_trace_setevent 新增事件和列。
- (可選)使用 sp_trace_setfilter 來配置過濾器。
- 呼叫 sp_trace_setstatus 啟動追蹤。
sp_trace_create 程序初始化一個新的追蹤定義。指定輸出檔案路徑、最大檔案大小和捲動更新選項。該過程會傳回一個追蹤 ID,用於後續過程呼叫以配置追蹤。
使用 sp_trace_setevent 程序新增事件。為要擷取的每個事件-列組合指定追蹤 ID、事件 ID 和列 ID。多次調用此過程以建立完整的追蹤配置。
使用 sp_trace_setfilter 程序配置過濾器。指定追蹤 ID、列 ID、邏輯運算子、比較運算子和篩選值。多個過濾器呼叫組合起來可以創建複雜的過濾條件。
呼叫 sp_trace_setstatus 並傳入狀態值 1 來啟動追蹤。呼叫相同過程並傳入狀態值 0 來停止追蹤。呼叫該過程並傳入狀態值 2 來刪除追蹤定義。
8.1.2 伺服器端追蹤的優點
降低客戶端開銷使伺服器端追蹤成為生產監控的理想選擇。資料庫伺服器處理所有追蹤操作,而無需消耗客戶端電腦資源。將事件傳輸到客戶端應用程式不會消耗網路頻寬。
自動執行可實現無人值守的追蹤收集。即使沒有客戶端連接,伺服器端追蹤在創建後仍會繼續運行。透過以下方式安排追蹤創建: SQL Server 用於自動監控的代理作業。
伺服器端處理可降低效能影響。事件直接寫入磁碟,無需額外的序列化或網路傳輸。緩衝區管理可最佳化磁碟 I/O,從而提高整體效能。
8.2 追蹤重播功能
8.2.1 捕獲追蹤以進行重播
請按照以下步驟建立可重播的追蹤:
- 使用 TSQL_重播 模板。
- 驗證是否已選擇所有必要的事件和列。
- 配置追蹤以儲存到檔案。
- 在您想要擷取的工作負載期間執行追蹤。
- 停止追蹤並保存檔案。
必需的事件和列可確保追蹤重播的完整。 TSQL_Replay 範本包含所有必要的事件類型和資料列。缺少必需元素會導致重播失敗,因此在進行重播擷取時,請務必使用此範本。
8.2.2 重播痕跡
使用下列步驟重播擷取的工作負載:
- In SQL Server 分析器,點擊 文件 -> 未結案工單 -> 追蹤文件.
- 選擇可重播的追蹤檔案。
- 點擊 重播 -> 開始.
- 在回放對話框中連接到目標伺服器。
- 配置重播選項,包括重播順序和時間。
- 點擊 OK 開始重播。
- 在狀態視窗中監控重播進度。
重播配置選項控制如何 SQL Server Profiler 會重現捕捉的工作負載。按擷取順序重播事件以保持時間關係。請配置是保持原始時間還是盡快重播事件。
8.2.3 追蹤重播的用例
透過重現真實的工作負載,負載測試可以從軌跡重播中獲益。捕捉生產工作負載軌跡,並在測試系統中重播,以驗證真實使用模式的效能。調整並發設定以模擬不同的負載等級。
環境遷移驗證確保新系統能夠處理現有工作負載。從當前生產系統捕獲追蹤訊息,並在新硬體或更新的硬體上重播。 SQL Server 版本。比較效能指標以驗證遷移不會降低效能。
測試場景包括程式碼更改後的回歸測試、驗證優化器更改 SQL Server 版本和壓力測試硬體配置。 Replay 提供一致、可重複的工作負載,以實現可靠的測試。
8.3 將 SQL Profiler 與資料庫引擎優化顧問集成
透過擷取包含相應事件的追蹤來為資料庫引擎優化顧問建立工作負載檔案。使用優化模板確保捕獲所有必要的資訊以進行分析。
啟動資料庫引擎優化顧問,並選擇追蹤文件作為工作負載來源。此顧問會分析所擷取的查詢,並推薦可提高效能的索引、索引檢視或分區策略。
效能最佳化工作流程將追蹤擷取與調優分析整合在一起。在正常運作期間捕獲代表性工作負載,使用調優顧問進行分析,審查建議,在開發過程中測試建議的更改,並最終在生產環境中實施已批准的更改。
8.4 自動追蹤收集
使用以下方式安排跟踪 SQL Server 代理作業自動收集資料。建立使用 sp_trace 程序定義伺服器端追蹤的 T-SQL 腳本。安排這些腳本在特定時間或間隔運行。
PowerShell 自動化可實現複雜的追蹤管理場景。編寫 PowerShell 腳本來建立追蹤、監控其狀態並處理收集的資料。透過任務計劃程序或 SQL Server 代理。
SQL Server 代理作業提供可靠的定時執行。建立作業,使其在監控週期開始時啟動跟踪,並在資料收集完成後停止追蹤。配置作業通知,以便在發生故障時提醒管理員。
8.5 以程式設計方式分析跟踪
使用 fn_trace_gettable 函數透過 T-SQL 讀取追蹤檔案。此表值函數解析追蹤檔案並以結果集的形式傳回事件資料。使用標準 T-SQL 查詢此資料以執行自訂分析。
自訂分析腳本支援自動化追蹤處理。編寫查詢來計算總計統計資料、識別模式或標記異常。安排這些腳本在追蹤收集完成後自動運行。
透過查詢表中儲存的追蹤資料來產生報告。建立按時間段、使用者或應用程式聚合事件的視圖。建立報告解決方案,定期洞察資料庫活動和效能。
9. SQL Server 分析器最佳實踐
9.1 性能最佳實踐
9.1.1 最小化追蹤開銷
僅選擇必要的事件以減少追蹤開銷。每增加一種事件類型都會增加追蹤引擎必須處理的資料量。請檢查您的監控目標,並僅包含與這些目標直接相關的事件。
有效使用過濾器,避免捕捉不相關的數據。依資料庫名稱過濾可排除系統資料庫。按持續時間過濾可僅擷取慢速查詢。按應用程式名稱過濾可專注於特定應用程式。適當的過濾可顯著降低追蹤開銷。
伺服器端與客戶端的考慮因素會影響效能。伺服器端追蹤會將資料直接寫入磁碟,而開銷極小。客戶端追蹤會透過網路將事件傳輸到 Profiler 接口,這會增加延遲和頻寬消耗。建議使用伺服器端追蹤進行生產監控。
9.1.2 優化追蹤存儲
檔案大小管理可防止磁碟空間耗盡。根據可用儲存空間設定最大檔案大小限制。啟用文件滾動更新功能可建立多個文件,而不是無限增大單一文件。在追蹤執行期間監控磁碟空間。
表格儲存與檔案儲存的效能權衡有所不同。文件儲存繞過了儲存引擎,因此在追蹤執行期間效能更佳。表儲存允許針對追蹤資料執行 T-SQL 查詢,但會增加寫入開銷。請根據您的分析需求選擇儲存類型。
9.2 安全最佳實踐
權限管理控制哪些人可以建立和運行追蹤。僅向需要追蹤功能的受信任用戶授予 ALTER TRACE 權限。 sysadmin 角色的成員擁有不受限制的追蹤存取權。請定期審查和審核追蹤權限。
敏感資料保護需要謹慎的追蹤配置。處理敏感資料時,請避免擷取完整的查詢文字。考慮過濾或加密包含機密資訊的追蹤輸出。將追蹤文件儲存在具有適當存取控制的安全位置。
追蹤檔案安全性可防止未經授權存取捕獲的資料。設定檔案權限以限制對追蹤檔案的存取。如果追蹤文件包含敏感訊息,請對其進行加密。分析完成後刪除追蹤文件,以最大程度地降低洩漏風險。
9.3 生產環境注意事項
9.3.1 何時在生產中使用 Profiler
風險評估決定何時 SQL Server 分析器適用於生產環境。分析器會引入可測量的開銷,且開銷會隨著追蹤範圍的擴大而增加。在運行生產追蹤之前,請評估診斷價值是否足以抵消效能影響。
最小化影響配置可實現更安全的生產追蹤。使用高選擇性過濾器僅捕獲關鍵事件。設定持續時間閾值以忽略快速執行的查詢。在故障排除會話期間,將追蹤持續時間限制為較短的時間段。配置伺服器端追蹤以減少客戶端開銷。
9.3.2 生產監控的替代方案
擴展事件降低了生產監控的開銷。這項現代技術比 SQL Server 分析器。將監控解決方案遷移到擴展事件以供長期生產使用。
查詢儲存功能無需手動配置追蹤即可自動擷取查詢效能資料。在生產資料庫上啟用查詢儲存功能,即可追蹤查詢執行統計資料隨時間的變化。查詢儲存功能提供大部分效能監控功能,且無需追蹤開銷。
動態管理視圖 (DMV) 為特定場景提供輕量級監控。 DMV 提供當前狀態信息,但不捕獲歷史事件。定期查詢 DMV 即可監控伺服器運作狀況,無需承擔持續追蹤的開銷。
9.4 痕跡管理最佳實踐
命名約定可確保追蹤文件易於識別且井然有序。追蹤檔案名稱應包含日期、時間、伺服器名稱和用途。所有追蹤記錄應使用一致的命名模式,以方便管理和分析。
文檔記錄追蹤配置和用途。記錄您捕獲的事件、創建追蹤的原因以及從分析中了解到的資訊。維護針對生產系統運行的追蹤日誌,以用於合規性和故障排除。
保留策略可防止過多的追蹤文件累積。根據業務需求和儲存容量定義追蹤文件的保留時長。自動刪除舊的追蹤檔案以釋放磁碟空間。刪除前,將重要的追蹤檔案存檔到長期儲存中。
9.5 要避免的常見錯誤
過度追蹤會導致過大的效能開銷,並產生難以管理的資料量。避免不加篩選地捕捉所有事件。先從範圍窄、重點突出的追蹤開始,僅在必要時才擴展範圍。數據越多並不總是越有利於有效的故障排除。
忘記停止追蹤會浪費資源並佔用大量磁碟空間。監控完成後務必停止追蹤。設定追蹤持續時間限製或最大檔案大小,以防止追蹤失控。定期監控正在運行的跟踪,並停止不活躍或不必要的跟踪。
忽略過濾器優化會導致效能下降和分析困難。在開始追蹤之前,請務必花時間配置有效的過濾器。在開發環境中測試過濾器,以驗證它們是否能夠捕獲預期資料。根據捕獲的結果審查並改進過濾器。
10. 替代方案 SQL Server 2025 年的 Profiler
10.1 擴展事件:現代替代品
10.1.1 什麼是擴充事件
擴展事件代表 SQL Server的現代事件處理架構。微軟專門設計了這個系統來解決 SQL Server Profiler 的限制包括效能開銷和配置靈活性。擴展事件提供了全面的監控功能,同時顯著降低了資源消耗。
架構和優勢使擴展事件與舊式追蹤技術區分開來。事件引擎深度整合到 SQL Server其核心架構以最小的開銷捕獲事件。非同步事件緩衝可防止監控阻塞資料庫操作。靈活的目標選項支援多種輸出配置。
效能優勢使擴展事件成為生產監控的理想選擇。基準測試表明,擴展事件的開銷比同類產品低 50-90%。 SQL Server 分析器追蹤。該架構在高事件量下具有更好的擴展性,並支援更多並發監控會話。
10.1.2 從 Profiler 遷移到擴充事件
事件映射翻譯 SQL Server Profiler 事件到擴展事件的對應關係。大多數 Profiler 事件都有對應的擴充事件。微軟提供了文檔,用於映射這兩個系統之間的常用事件。
在擴展事件中建立會話需要學習新的語法和概念。使用 T-SQL CREATE EVENT SESSION 語句或 Management Studio 中的擴充事件圖形介面來定義事件會話。會話指定要擷取的事件、要收集的資料以及結果的儲存位置。
10.1.3 擴充事件工具和介面
SSMS 擴充事件 UI 提供圖形化會話管理。您可以透過物件資源管理器中的「管理」資料夾存取擴充事件。透過介面建立、修改和監控事件會話。以網格和圖表等圖形格式查看擷取的資料。
T-SQL 會話管理支援編程式擴展事件控制。編寫 CREATE EVENT SESSION 語句,在程式碼中定義會話。使用 ALTER EVENT SESSION 修改正在執行的會話。使用 DROP EVENT SESSION 刪除會話。此方法有助於自動化監控解決方案。
10.2 SQL Server 查詢存儲
查詢儲存會自動擷取已啟用此功能的資料庫的查詢效能資料。此功能可追蹤一段時間內的查詢計劃、執行統計資訊和效能指標,無需手動配置追蹤。查詢儲存會維護歷史數據,從而實現趨勢分析和回歸檢測。
透過查詢儲存進行即時查詢效能監控,揭示目前系統行為。查看最近執行的查詢、其執行計劃和資源消耗。識別持續時間增加或執行計劃發生變化的查詢,這些查詢可能預示著存在問題。
歷史查詢分析支援跨時間段比較。查詢儲存會保留效能數據,保留期限可配置。將當前性能與歷史基線進行比較,以識別性能回歸。分析性能趨勢,預測未來的容量需求。
當您需要自動、始終在線的效能監控時,請使用查詢儲存。在生產資料庫上啟用查詢存儲,以持續追蹤查詢行為。查詢儲存透過提供效能問題的歷史上下文,補充了基於追蹤的故障排除。
10.3 動態管理視圖(DMV)
透過 DMV 進行輕量級監控,提供當前狀態信息,而無需捕獲歷史事件。 DMV 暴露內部 SQL Server 透過可查詢視圖取得統計資料和元資料。使用標準 T-SQL SELECT 語句查詢 DMV。
用於效能監控的常見 DMV 查詢包括用於查詢效能統計的 sys.dm_exec_query_stats、用於目前正在執行的請求的 sys.dm_exec_requests 以及用於等待統計的 sys.dm_os_wait_stats。這些視圖可以洞察伺服器運作狀況和活動的特定時間點。
DMV 透過提供即時指標來補充基於追蹤的監控。使用 DMV 進行快速健康檢查和當前狀態分析。將 DMV 查詢與追蹤資料結合,可獲得全面的故障排除方法。
10.4 第三方監控工具
商業替代方案提供了增強的監控能力,超越 SQL Server的內建工具。 SolarWinds、Redgate 和 Quest 等供應商的產品提供全面的監控、警報和分析功能。這些工具通常結合了多種資料來源,包括追蹤、DMV 和效能計數器。
透過功能比較,揭示不同監控方法的優勢。第三方工具提供卓越的使用者介面、自動警報和歷史趨勢分析功能。 SQL Server內建工具無需額外費用,並可實現更深層的整合。請根據您的具體需求和預算評估這些工具。
10.5 選擇適合您需求的工具
決策矩陣有助於選擇合適的監控工具。對於臨時故障排除, SQL Server Profiler 依然易於使用且有效率。對於生產環境監控,擴充事件或查詢儲存可提供更佳效能。對於全面的企業級監控,第三方解決方案提供的功能最為豐富。
選擇工具的標準包括效能開銷、易用性、資料保留要求和預算限制。選擇工具時,請考慮團隊的專業知識。即使新的替代方案提供更好的功能,熟悉的工具也能更快地進行故障排除。
結合多種工具,打造全面的監控策略。使用查詢儲存進行持續效能跟踪,使用擴展事件進行特定問題調查,並使用 DMV 進行即時健康檢查。這種分層方法可提供強大的監控功能,且不會產生過多的開銷。
11。 故障排除 SQL Server 分析器問題
11.1 常見連線問題
身份驗證失敗會阻止 SQL Server 分析器無法連接到目標伺服器。請確認您使用的憑證與所選的身份驗證方法相符。 Windows 驗證要求您的 Windows 帳戶具有相應的憑證。 SQL Server 權限。 SQL Server 身份驗證需要有效的 SQL 登入憑證。
網路連線問題表現為逾時錯誤或連線失敗。請驗證 SQL Server 允許遠端連線。檢查防火牆設定是否允許以下流量: SQL Server的連接埠。在排除 Profiler 特定問題之前,請使用 ping 和 telnet 測試基本連線。
11.2 Profiler 的效能問題
追蹤執行緩慢表示追蹤配置開銷過大。請檢查所選事件並刪除不必要的事件。新增篩選器以減少捕獲的事件數量。考慮使用伺服器端追蹤來減少客戶端處理負載。
高資源消耗會影響 SQL Server 以及 Profiler 客戶端。在追蹤執行期間監控伺服器 CPU 和記憶體。如果伺服器資源受限,請提高過濾器的選擇性或減少擷取時長。客戶端資源問題需要關閉其他應用程式或升級客戶端硬體。
11.3 追蹤文件和表格問題
損壞的追蹤檔案無法打開 SQL Server 分析器。損壞通常由非正常終止追蹤或磁碟錯誤造成。請嘗試在文字編輯器中開啟該文件,以驗證其是否完全損壞。有時,可以使用 fn_trace_gettable 將部分資料匯入表中來恢復。
嘗試從以下位置載入追蹤時出現表格存取問題 SQL Server 表。驗證您對追蹤表擁有 SELECT 權限。檢查該表是否已刪除或重新命名。確保您連接到包含追蹤表的正確伺服器和資料庫。
11.4 缺失事件或不完整數據
過濾器配置錯誤會導致追蹤遺漏預期事件。請仔細檢查過濾器條件,確保其不會排除所需事件。透過運行短追蹤並驗證捕獲的數據是否符合預期來測試過濾器。暫時移除過濾器以確定是否是它們導致了問題。
緩衝區溢位發生於 SQL Server 無法快速寫入追蹤資料以跟上事件產生的速度。這通常發生在活動高峰期未過濾的追蹤資料中。症狀包括丟失事件或“未捕獲事件”警告。解決方法是添加過濾器以減少事件量,或提高追蹤檔案位置的磁碟 I/O 效能。
11.5 分析器崩潰和錯誤
常見的錯誤訊息包括“無法建立追蹤”,表示權限問題或資源限制。 「追蹤已停止」訊息表示伺服器端追蹤失敗,可能是由於磁碟已滿。 “追蹤定義無效”錯誤表示配置問題。
解決方法取決於具體錯誤。權限錯誤需要授予使用者 ALTER TRACE 權限。資源錯誤需要釋放磁碟空間或記憶體。配置錯誤需要檢查並更正追蹤設定。重啟。 SQL Server 如果它變得無響應。
12.實用 SQL Server 分析器場景和範例
12.1 場景 1:辨識資料庫中最慢的查詢
本演練示範如何擷取和分析慢查詢。
請依照以下步驟配置追蹤:
- 發佈會 SQL Server 使用效能分析器連接到目標伺服器。
- 點擊 文件 -> 新蹤跡.
- 在 軌跡名稱 領域。
- 選擇 TSQL 來自 使用模板 落下。
- 點擊 活動選擇 標籤。
- 點擊 列過濾器.
- 選擇 租期 並在 大於或等於.
- 選擇 數據庫名稱 並輸入您的資料庫名稱 Like.
- 點擊 OK 關閉過濾器。
- 啟用 儲存到文件 並指定檔案路徑。
- 點擊 運行 開始捕捉。
在高峰業務時段運行追蹤至少 30 分鐘,以捕捉代表性工作負載。收集足夠的數據後停止追蹤。
按照此過程分析結果:
- 在操作欄點擊 租期 列標題按執行時間排序。
- 確定運行時間最長的前 10 個查詢。
- 對於每個查詢,檢查 文字數據 列。
- 複製查詢文字並貼上到 Management Studio 中。
- 使用 顯示預計執行計劃 分析查詢。
- 查找表掃描、缺少索引或低效率連線。
- 評論 中央處理器, 讀以及 寫 資源消耗模式的列。
12.2 場景 2:除錯死鎖問題
此範例顯示如何擷取和分析死鎖。
使用以下步驟設定死鎖監控:
- 建立一個名為「死鎖調查」的新追蹤。
- 點擊 活動選擇 標籤。
- 點擊 顯示所有活動.
- 拓展 鎖 類別。
- 選擇 鎖:死鎖.
- 選擇 鎖:死鎖鏈.
- 拓展 錯誤和警告 類別。
- 選擇 阻塞進程報告.
- 請確保 文字數據 列被選取。
- 點擊 運行 開始監測。
當追蹤執行期間發生死鎖時,追蹤網格中會出現 Lock:Deadlock 事件。
請依照以下步驟解釋死鎖資訊:
- 在操作欄點擊 鎖:死鎖 事件行。
- 查看 文字數據 底部面板中的列。
- 從 TextData 複製 XML 內容。
- 開啟 Management Studio 並建立新的查詢視窗。
- 將 XML 貼到查詢視窗中。
- 使用 .xdl 副檔名儲存檔案。
- 在 Management Studio 中開啟 .xdl 檔案以查看死鎖圖。
- 該圖顯示了所涉及的進程、鎖定的資源以及所選的受害者。
- 查看兩個進程的查詢以了解衝突。
解決步驟通常涉及重新排序應用程式程式碼中的操作以按照一致的順序存取資源、減少事務範圍或實施適當的鎖定提示。
12.3 場景 3:追蹤來自特定應用程式的所有查詢
此場景演示了特定於應用程式的查詢監控。
使用以下步驟配置特定於應用程式的追蹤:
- 建立一個名為「應用程式查詢追蹤」的新追蹤。
- 點擊 標準版 模板。
- 點擊 活動選擇 標籤。
- 點擊 列過濾器.
- 選擇 應用程式名稱.
- 在 Like 領域。
- 如果您的應用程式使用連接池,則可能需要通配符匹配。
- 點擊 OK 應用過濾器。
- 啟用 儲存到表 以便於查詢。
- 點擊 運行 開始捕捉。
查詢模式分析揭示了你的應用程式如何與 SQL Server:
- 收集數據後,停止追蹤。
- 開啟 Management Studio 並使用追蹤表連接到伺服器。
- 查詢追蹤表來分析模式。
- 按類型計數查詢以查看操作組合。
- 找出執行頻率最高的查詢語句。
- 尋找可以快取或優化的查詢。
- 檢查重複的相同查詢,表示缺少連接池。
12.4 場景 4:審核資料存取以確保合規性
此範例展示了安全審計追蹤的建立。
請依照以下步驟設定安全審計:
- 建立一個名為「安全審計追蹤」的新追蹤。
- 點擊 活動選擇 標籤。
- 點擊 顯示所有活動.
- 拓展 安全審計 類別。
- 選擇 審計登入, 審計註銷, 審計登入失敗.
- 選擇 審計資料庫對象訪問.
- 拓展 TSQL 類別。
- 選擇 SQL:批次完成.
- 點擊 列過濾器.
- 搜尋範圍 物件名稱 監控特定的敏感表。
- 啟用 儲存到表 以便長期保留。
- 啟用伺服器端追蹤以實現無人值守操作。
- 點擊 運行 開始審計。
透過查詢追蹤表產生稽核報告:
- 建立按使用者和時間段匯總存取的查詢。
- 識別不尋常的訪問模式或下班後的活動。
- 記錄失敗的登入嘗試以供安全審查。
- 將稽核資料匯出至報告系統,用於合規性文件。
- 根據保留政策存檔已完成的審計追蹤。
12.5 場景 5:捕捉效能測試的工作負載
此場景演示了用於測試目的的工作負載擷取。
使用以下步驟建立可重播的追蹤:
- 建立一個名為「Workload Capture」的新追蹤。
- 選擇 TSQL_重播 從模板下拉選單中。
- 此範本包括重播所需的所有事件和列。
- 點擊 活動選擇 標籤。
- 如果您想擷取特定的工作負載段,請套用過濾器。
- 啟用 儲存到文件.
- 指定具有足夠磁碟空間的檔案路徑。
- 設定適當的檔案大小限制並啟用翻轉。
- 點擊 運行 開始捕捉。
在代表性業務操作期間進行捕獲。為了全面捕捉工作負載,請運行追蹤幾個小時,涵蓋不同的活動模式。收集到足夠的數據後停止追蹤。
工作負載分析揭示了系統行為模式:
- 開啟捕獲的追蹤文件 SQL Server 探查器。
- 按類型和時間查看事件分佈。
- 計算總體資源消耗指標。
- 確定高峰活動期間和資源瓶頸。
- 使用追蹤進行資料庫引擎優化顧問分析。
- 針對測試系統重播追蹤以驗證變更。
13. 資料庫損壞檢測 SQL Server 輪廓
13.1 使用 SQL Server 腐敗預警信號分析器
資料庫損壞是資料完整性和系統可靠性面臨的最嚴重威脅之一。 SQL Server Profiler 並不是一個專門的損壞檢測工具,但它可以捕獲表明潛在損壞問題需要立即調查的關鍵警告信號。
13.2 指示潛在損壞的嚴重錯誤事件
- 嚴重性 24 錯誤(823、824、825):硬體與媒體故障。
- 錯誤 605:頁面檢索嘗試失敗
- 錯誤 8928 和 8929:物件損壞
13.3 可疑資料庫行為和警告模式
- 特定物件上的重複查詢逾時
- 存取衝突和應用程式崩潰
- 異常錯誤聚類
13.4 根據 Profiler 發現執行 DBCC CHECKDB
If SQL Server 如果 Profiler 發現可疑損壞,您可以使用 DBCC CHECKDB 對資料庫進行完整檢查。如果確認損壞,則執行修復。我們已編寫 如何完成這些任務的綜合指南.
如果 DBCC CHECKDB 無法修復資料庫,則損壞情況嚴重。在這種情況下,您可以採取 第三方 SQL 復原工具.
14. 常見問題
問:是 SQL Server Profiler 仍然支持 SQL Server 2022?
答:是的, SQL Server Profiler 仍然包含在 SQL Server 2022和 SQL Server Management Studio,儘管自 SQL Server 2016年。微軟繼續在當前版本中提供該工具,但建議遷移到擴展事件以實現新的監控實作。該工具仍然有效,並廣泛用於故障排除和臨時分析。
問: SQL Server 分析器和 SQL 追蹤?
A: SQL Server Profiler 是一個圖形使用者介面工具,它連接到 SQL 追蹤引擎,該引擎在 SQL ServerSQL Trace 是實際擷取事件的底層技術。您可以使用 Profiler 的介面或直接透過 T-SQL 預存程序(例如 sp_trace_create)建立追蹤。 Profiler 提供更簡單的配置,而 T-SQL Trace 提供更多自動化可能性。
Q:效能開銷是多少 SQL Server 分析器添加?
答:效能影響因追蹤配置而異。經過良好過濾的追蹤(僅捕獲特定事件)可能會增加 1-5% 的開銷。配置不當且未使用過濾器的追蹤可能會增加 20-50% 甚至更高的開銷,尤其是在繁忙的系統上。伺服器端追蹤的影響小於客戶端追蹤。請務必使用過濾器以最大程度地減少事件量,並首先在非生產環境中測試追蹤。
Q:我可以跑步嗎 SQL Server 生產伺服器上的分析器?
答:你可以跑 SQL Server 在生產伺服器上使用 Profiler,但務必謹慎。使用選擇性較高的篩選器,限制跟踪時長,並優先使用伺服器端跟踪,以最大程度地降低影響。盡可能在活動較少的時段運行生產追蹤。對於持續的生產監控,請考慮使用擴展事件或查詢存儲,因為它們的開銷更低。
Q:我需要使用什麼權限 SQL Server 分析器?
答:您需要 ALTER TRACE 權限才能建立和執行追蹤。 sysadmin 固定伺服器角色的成員會自動擁有此權限。對於非 sysadmin 用戶,請明確授予 ALTER TRACE 權限。此外,您還需要根據配置獲得適當的權限才能將追蹤資料儲存到檔案或表格中。
Q:為什麼我看不到我的追蹤中的所有事件?
答:事件遺失通常是由於過濾器限制過多或緩衝區溢位造成的。請檢查您的過濾器配置,確保其沒有排除所需的事件。緩衝區溢位發生在以下情況: SQL Server 無法足夠快地寫入事件,通常是在繁忙的系統上出現未過濾的追蹤資訊。新增過濾器可以減少事件量或提高磁碟 I/O 效能。檢查是否有指示未捕獲事件的錯誤訊息。
Q:如何使用 SQL Server 分析器?
答:建立一個包含「鎖」類別中的「鎖:死鎖」和「鎖:死鎖鏈」事件的追蹤記錄。確保選取「文字資料」列,因為它包含死鎖圖 XML。發生死鎖時,從「文字資料」列複製 XML 文件,以 .xdl 副檔名儲存,然後在 SQL Server Management Studio 查看圖形死鎖圖。
Q:將追蹤保存到文件和表中有什麼區別?
答:文件在追蹤執行期間提供更好的性能,因為它們繞過了 SQL Server 儲存引擎。檔案追蹤將資料直接寫入磁碟,開銷極小。表追蹤則透過儲存引擎寫入,這會增加開銷,但可以立即對追蹤資料進行 T-SQL 查詢。對於效能敏感的場景,以及需要在擷取期間或擷取後立即查詢資料的表,請使用檔案追蹤。
Q:我可以實現自動化嗎? SQL Server 分析器追蹤收集?
答:是的,使用 T-SQL 預存程序建立的伺服器端追蹤來自動收集追蹤資訊。使用 sp_trace_create 和相關流程編寫腳本,然後透過 SQL Server 代理作業。此方法可依指定計畫實現無人值守的追蹤收集。 PowerShell 腳本為更複雜的場景提供了另一個自動化選項。
Q:我應該運行追蹤多長時間?
答:追蹤時長取決於您的目標。對於特定問題的故障排除,請在問題重現的同時運行跟踪,通常需要 5-30 分鐘。對於效能分析,請在活動高峰期至少擷取一小時的資料。對於工作負載分析或容量規劃,請在不同時間段收集數小時的資料。監控完成後,請務必停止追蹤以釋放資源。
Q:如果我的追蹤文件太大,我該怎麼辦?
答:在追蹤屬性中啟用文件滾動功能,以建立多個較小的文件,而不是一個大文件。請根據您的磁碟空間和分析需求設定最大檔案大小。使用過濾器來減少捕獲的事件量。對於較大的跟踪,請考慮分段分析數據,而不是一次性加載整個跟踪。定期歸檔或刪除舊的追蹤檔案以節省磁碟空間。
Q:如何找到導致 CPU 使用率高的查詢?
答:建立一個包含 SQL:BatchCompleted 和 RPC:Completed 事件的追蹤記錄。記錄中包含 CPU、Duration 和 TextData 欄位。按 Duration 列篩選,僅擷取超過閾值(例如 1000 毫秒)的查詢。收集資料後,按 CPU 列降序排列。排名靠前的查詢消耗的處理器時間最多。檢查這些查詢,尋找最佳化機會,例如缺少索引或邏輯效率低下。
問:可以 SQL Server 分析器捕獲查詢執行計劃?
A: SQL Server Profiler 可以透過「效能」類別中的「Showplan XML」事件擷取執行計劃資訊。選擇「Showplan XML」或「Showplan XML Statistics Profile」事件可擷取完整的執行計劃。 “TextData”列包含 XML 計劃資料。但是,對於常規執行計劃分析, SQL Server Management Studio 的圖形執行計劃功能或查詢儲存提供了更簡單的替代方案。
Q:對於一般監控而言,最佳的入門範本是什麼?
答:標準模板為一般監控提供了一個良好的起點。它包含常見的查詢執行事件、預存程序呼叫和錯誤跟踪,並且開銷均衡。對於專注於查詢效能的低影響監控,請使用 T-SQL 範本。在了解基本原理後,您可以根據自身特定需求,透過新增篩選器和調整事件選擇來自訂範本。
Q:如何僅追蹤特定的應用程式或使用者?
答:使用列篩選器來隔離特定的應用程式或使用者。對於應用程序,請使用連接字串中指定的名稱按 ApplicationName 列進行篩選。對於用戶,請使用 LoginName 欄位進行篩選 SQL Server 登入名稱或 Windows 帳戶名稱。組合多個篩選器可進一步縮小範圍,例如同時按應用程式名稱和資料庫名稱進行過濾,以監控某個應用程式在特定資料庫中的活動。
15. 結論與後續步驟
15.1個關鍵要點
SQL Server 儘管 Profiler 已被棄用,但它仍然是進行臨時資料庫故障排除的寶貴工具。其簡潔明了的介面和全面的事件捕獲功能使其成為需要快速診斷並立即獲得結果的理想選擇。您可以使用 Profiler 來排查特定問題、分析應用程式行為以及進行安全審計。
最佳實踐包括積極使用過濾器以最大程度地降低性能影響,在生產環境中優先使用伺服器端跟踪,並將跟踪時長限制在必要的範圍內。僅選擇必要的事件和列以減少開銷。將追蹤保存到文件而不是表中,以提高捕獲性能。
15.2 前進:擁抱現代工具
從 SQL Server 從 Profiler 到 Extended Events,打造長期監控解決方案。 Profiler 仍然能夠正常運作,但投入時間學習 Extended Events 可以讓你在未來 SQL Server 版本。首先從簡單的擴展事件會話開始,這些會話可以復現您常用的 Profiler 追蹤。
在生產資料庫上啟用查詢存儲,即可實現自動效能監控,無需手動配置追蹤。查詢儲存會持續捕獲查詢計劃和執行統計信息,為效能分析提供基準資料。將查詢儲存與定向擴展事件會話結合使用,可實現更全面的監控。
15.3 其他資源
以下資源將幫助你加深你的 SQL Server 分析器知識並及時掌握監控最佳實務:
微軟官方文檔
- SQL Server 分析器文檔 – 事件、專欄和程序的綜合參考
- SQL 追蹤系統預存程序 – 用於伺服器端追蹤建立的 T-SQL 參考
- 擴充事件文檔 – 遷移指導與現代監控方法
- 查詢儲存文檔 – 自動查詢效能追蹤參考
- 效能監控和調優工具 – 概覽 SQL Server 監控選項
社區資源
- SQL Server Central – 資料庫專業人員的文章、論壇和腳本
- 堆棧溢出 SQL Server 標籤 – 針對特定故障排除問題的社群問答
- Reddit r/SQLServer – 討論論壇 SQL Server 主題和建議
- SQLServerCentral.com 論壇 – 關於分析和效能的活躍社群討論
- MSDN SQL Server 論壇 – 微軟官方社群支援論壇
部落格和技術文章
- SQL Server 性能監視器 – 專門的效能監控和最佳化內容
- Brent Ozar Unlimited 部落格 – 效能調優與監控最佳實踐
- SQLSkills.com – 專家級 SQL Server 來自行業領袖的內容
- Microsoft微軟 SQL Server 部落格 – 官方產品更新和功能公告
- 簡單談話 – 實用 SQL Server 教程和案例研究
培訓與認證
- 微軟學習 – 免費線上培訓模組 SQL Server
- Microsoft 認證:Azure 資料庫管理員助理 – 官方認證路徑
- Pluralsight SQL Server 課程-關於分析和性能調優的視訊培訓
- LinkedIn學習 SQL Server 培訓-專業發展課程
- Udemy SQL Server 表演課程-實用的實作訓練選項
聽讀叢書
- SQL Server 查詢效能調優-全面的效能最佳化指南
- 專業版 SQL Server 內部——深入探究 SQL Server 建築
- SQL Server 執行計劃-理解查詢最佳化
- 專家績效指數 SQL Server – 索引設計與優化
- SQL Server 進階故障排除和效能調優-進階診斷技術
工具和實用程式
- SQL Server 管理工作室 – 主要介面 SQL Server 輪廓
- Azure數據工作室 – 現代跨平台資料庫工具
- sp_WhoIsActive – 受歡迎的社群創建的監控儲存過程
- SQL Sentry Plan Explorer – 免費執行計劃分析工具
- DBForge Studio – 第三方 SQL Server 開發和管理工具
關於作者
元盛 是一位資深資料庫管理員 (DBA),擁有超過 10 年的 SQL Server 環境和企業資料庫管理。他成功解決了金融服務、醫療保健和製造業等行業的數百個資料庫恢復場景。
袁專長於 SQL Server 資料庫復原 高可用性解決方案以及性能優化。他擁有豐富的實務經驗,包括管理數TB資料庫、實施等。 始終在線可用性組並為關鍵業務系統開發自動化備份和復原策略。
透過他的技術專長和實踐方法,袁致力於創建全面的指南,幫助資料庫管理員和 IT 專業人員解決複雜的 SQL Server 高效應對挑戰。他始終掌握最新 SQL Server 版本和微軟不斷發展的資料庫技術,定期測試恢復場景以確保他的建議反映現實世界的最佳實踐。
有關於的問題 SQL Server 恢復或需要額外的資料庫故障排除指導?袁歡迎 回饋和建議 用於改進這些技術資源。























