SQL Server 擴充的事件簡介

SQL Server 擴充的事件是一種適用於伺服器系統的一般事件處理系統。擴充的事件基礎結構可支援 SQL Server 中資料的相互關聯,而在某些條件下,則可支援作業系統和資料庫應用程式中資料的相互關聯。在後者的情況下,擴充的事件輸出必須導向 Windows 事件追蹤 (ETW),才能讓此事件資料與作業系統或應用程式事件資料相互關聯。

所有應用程式都有執行點,這些執行點在應用程式內部和外部都很實用。在應用程式內,可以使用工作最初執行期間所收集的資訊將非同步處理加入佇列。在應用程式外,執行點會將有關受監視之應用程式的行為和效能特性資訊提供給監視公用程式。

擴充的事件可支援在處理序外使用事件資料。這些資料通常是由以下項目所使用:

  • 追蹤工具,例如 SQL 追蹤和系統監視器。

  • 記錄工具,例如 Windows 事件記錄檔或 SQL Server 錯誤記錄檔。

  • 管理產品或是開發產品上之應用程式的使用者。

擴充的事件設計和功能

擴充的事件具有下列重要的設計層面:

  • 擴充之事件引擎的事件無從驗證,如此可讓此引擎將任何事件繫結至任何目標,因為此引擎不受到事件內容的限制。如需有關擴充的事件引擎的詳細資訊,請參閱<SQL Server 擴充的事件引擎>。

  • 事件會與事件取用者區隔,後者在擴充的事件中稱為「目標」。這表示,任何目標都可以接收任何事件。此外,目標可以自動耗用任何引發的事件,這樣可以記錄或提供其他事件內容。如需詳細資訊,請參閱<SQL Server 擴充的事件目標

  • 事件與事件引發時所要採取的動作不同。因此,任何動作都可以與任何事件產生關聯。

  • 述詞可以動態篩選事件的引發,如此可讓擴充的事件基礎結構增加彈性。如需詳細資訊,請參閱<SQL Server 擴充的事件封裝>。

擴充的事件可以同步產生事件資料 (以及非同步處理該資料),這樣可為事件處理提供彈性的方案。此外,擴充的事件還提供下列功能:

  • 在伺服器系統上處理事件的統一方式,同時也可讓使用者隔離特定的事件來進行疑難排解。

  • 與現有的 ETW 工具整合並支援這些工具。

  • 可根據 Transact-SQL 完整設定的事件處理機制。

  • 能夠動態監視使用中處理序,同時對這些處理序有最少的影響。

搭配 ETW 使用擴充的事件

如果您想要使用擴充的事件,讓作業系統與資料庫應用程式中的資料產生關聯,我們建議您最好先具備 ETW 的實用知識。ETW 可以搭配擴充的事件一起使用,或是當做擴充的事件之事件取用者使用。下列主題提供取得有關 ETW 之背景資訊的起點:

使用擴充之事件的狀況

您可以針對各種監視和疑難排解狀況使用擴充的事件。下列案例說明幾個狀況,在這些狀況下,擴充的事件可以提供寶貴的資料來解決類似以下方面的問題:

  • 疑難排解造成工作集調整的原因。

  • 疑難排解 CPU 使用率過高的問題。

  • 疑難排解死結。

  • 讓要求活動與 Windows ETW 記錄檔相互關聯。

疑難排解造成工作集調整的原因

您遇到了實際伺服器的嚴重效能問題,造成用戶端應用程式逾時。這些問題似乎是暫時的,在 10-15 分鐘之後,效能將恢復正常狀態。

您可檢查 SQL Server 錯誤記錄檔,並尋找下列錯誤訊息:

「SQL Server 處理序記憶體的重要部分已被移出分頁。這可能導致效能變差。持續時間: 300 秒。記憶體使用情形: 34%。」

「沒有產量的 IOCP 接聽程式。」

[!附註]

IOCP 代表「I/O 完成通訊埠」。這個通訊埠會透過網路來服務使用者要求。此訊息表示上一分鐘已經封鎖完成通訊埠。

您懷疑 SQL Server 在回應伺服器上的記憶體壓力時不夠快速。當您使用 [工作管理員] 檢查記憶體時,伺服器上似乎有非常充足的可用記憶體。您嘗試從 SQL Server Management Studio 連接到資料庫,但是連接嘗試逾時。您將能夠從 Windows 命令提示字元中發出 SQLCMD - A 命令來連接到伺服器。這樣會在專用管理員連接上開啟工作階段。

您決定使用擴充的事件來取得詳細資訊。您會建立可執行以下作業的擴充的事件工作階段:

  • 為系統記憶體信號及伺服器記憶體總量變更加入事件。

  • 將輸出導向 ETW。這個輸出將會寫入磁碟機上所建立的檔案,這個檔案並未用於分頁檔或是由 SQL Server 資料庫檔案所使用。

在 Windows 命令提示字元上,您可執行指示來啟用對所有記憶體事件的 Windows 核心 ETW 追蹤。您可允許這兩個追蹤執行數分鐘,然後關閉擴充的事件工作階段和 Windows 核心追蹤。

您可使用 tracerpt.exe,讓 Windows 追蹤和 SQL Server ETW 追蹤相互關聯。您尋找一個事件,此事件指示已設定系統記憶體過低的通知,但是找不到此事件。您看到的是伺服器上所有處理序中的大量分頁錯誤。您在分頁之前檢查事件,然後發現所有處理序的工作集已經過調整,以回應來自驅動程式的記憶體配置要求。

疑難排解 CPU 使用率過高的問題

您正在調查實際系統上 CPU 使用率過高的問題。您使用各種動態管理檢視 (DMV) 來判斷 CPU 使用率是否可歸於系統上執行的查詢。這項檢查指示,大多數的查詢為特定使用者查詢。從 DMV 取得的資訊不夠用來診斷問題。

您會建立可執行以下作業的擴充的事件工作階段:

  • 使用可指定 CPU 臨界值的述詞讓陳述式的事件完成。

  • 在事件引發時,只讓動作收集查詢計畫。

  • 將收集的任何資料寫入檔案中。這個檔案所在的磁碟機未包含任何記錄檔或資料庫檔案。

當啟動擴充的事件工作階段之後,您會檢查輸出,並且能夠判斷 CPU 問題的原因是因為兩個經常聯結的資料表之間有資料類型轉換。

疑難排解死結

您已經收到來自使用者的報告,指示某些應用程式傳回死結錯誤。為了要提升疑難排解這些問題的效能,您決定將焦點放在最常叫用的死結上。您會建立可執行以下作業的擴充的事件工作階段:

  • 為工作階段設定死結事件追蹤。

  • 指定會根據死結識別碼來彙總的目標。

您會執行擴充的事件工作階段,然後在報告其他死結之後,您將能夠取得彙總死結資訊,連同每一個來源的完整 XML 死結圖表。使用這項資訊之後,您便能夠指出最常見的死結,並開始處理解決方案。

讓要求活動與 Windows ETW 記錄檔相互關聯

您正在實際伺服器上疑難排解應用程式緩慢的問題,而且能夠將原因縮小為長時間讀取磁碟。您會建立可執行以下作業的擴充的事件工作階段:

  • 加入磁碟讀取當做工作階段事件。

  • 將所收集到的資料傳送給 ETW。

在啟動擴充的事件工作階段之後,您便能夠執行 Windows ETW 核心追蹤。在 10 分鐘後,您將停止這兩個工作階段。

您使用 tracerpt.exe 來合併 Windows 追蹤與 SQL ETW 追蹤。從這個合併的追蹤當中,您能夠將 SQL Server 的讀取要求與 Windows 核心相互關聯,並加以追蹤。這項分析指示,在 I/O 要求傳回 SQL Server 之前,有長時間的延遲。使用此資訊可做出最後的判斷,也就是 I/O 問題出在實體 I/O 路徑上。