在 SQL Azure 中擷取實時儲存過程呼叫(根據 Query Profiler)
TL;DR - 是否可以在 SQL Azure 中擷取實時過程呼叫(帶有參數名稱/值),以複製如下所示的 SQL Profiler 的輸出 - 或者 - 是否有更好的方法來實現這一點?
從歷史上看,當我的 Web 應用程序性能不佳時,我使用 SQL Server Profiler 來擷取來自 Web 應用程序的呼叫,並在執行時查看儲存過程及其參數。然後我將它們複製/粘貼到 SSMS 中,並使用執行計劃來修改程序,直到性能得到提高:
現在,在測試 SQL Azure 時,我看到很多人詢問如何將 Profiler 與 SQL Azure 一起使用,並被告知不能(將來可能不會)。雖然這可能不再正確(因為網上的很多問題都很老了),但上面的問題仍然存在。
我已經測試了 Azure Performance Insight,但它提供了一個很好的概述,並沒有完全捕捉到我正在尋找的內容。
您可以使用 SQL Server Management Studio XEvent Profiler,還可以看到 Azure Data Studio 支持從雲和本地查看 XEvent,但 SSOS 使用環形緩衝區目標。
Microsoft 早在 2008 年就停止了為 Trace 開發功能。現在一切都集中在擴展事件上。Azure SQL 數據庫也是如此。擴展事件以非常相似的方式擷取 rpc_completed 事件語句文本。
例如,我正在從使用 SQlClient.SqlCommand 對象執行儲存過程的 PowerShell 腳本中擷取 rpc_completed 事件,如下所示:
$Sniffcmd = New-Object System.Data.SqlClient.SqlCommand $Sniffcmd.CommandType = [System.Data.CommandType]'StoredProcedure' $Sniffcmd.CommandText = "dbo.ProductTransactionHistoryByReference" $Sniffcmd.Parameters.Add("@ReferenceOrderID",[System.Data.SqlDbType]"Int") $Sniffcmd.Connection = $SqlConnection
該語句的 rpc_completed 事件操作的結果輸出如下:
聲明:exec dbo.ProductTransactionHistoryByReference @ReferenceOrderID=68187
如果您正在執行跟踪,這正是您所期望的,但它來自擴展事件。下面是幫助你開始在 Azure SQL 數據庫中使用擴展事件的文件。