2016-11-30 52 views
0

我們正在審查Azure門戶for SQL數據庫中正在運行的查詢。想知道是否有辦法確定調用該查詢的所有應用服務器請求,因此我們可以專注於我們的代碼以優化它(使用緩存等)。Azure SQL DB交叉引用對應用程序見解的查詢調用者

在應用程序洞察中,您可以從應用程序服務器調用中繼續下去,然後深入到依賴關係,但是我想爬上樹。搜索依賴性調用查詢,然後查看哪些應用程序服務器調用正在調用它。

回答

0

您可以使用AI搜索工具在門戶中查找所需的依賴關係,然後從詳細信息中使用「此操作的所有請求」或其他相關項鍊接。

如果您使用AI Analytics Portal,則可以編寫任何要查詢該信息的kql查詢,並在兩個表(請求和依賴關係)之間進行連接,假定依賴關係正確地具有operationId或其他一些要設置的字段集。

+0

感謝回答。它有點作品。當您在Query Performance Insights中搜索緩慢/頻繁的查詢時,唯一的唯一標識符是查詢ID和查詢命令(T-SQL)。然後你到AI,點擊服務器響應時間圖,然後在新的刀片上點擊依賴時間。從這裏,你不能通過該查詢ID(這將是理想的)進行搜索,但你可以放入一些文本來搜索查詢命令。但是您不能簡單地複製整個命令並在其上進行搜索,因此您必須選擇一部分命令文本進行搜索。 –

+0

這是您設想的過程,還是我錯誤地解釋了這個過程? –

1

此處查詢Performance Performance Insight PM。我們的功能利用存儲在Query Store中的信息。

不幸的是,當前查詢存儲不會跟蹤任何關於查詢源或查詢來自的主機的信息。查詢商店爲您的查詢提供了彙總視圖,例如查詢X被執行了Y次,並且在時間間隔t中佔用了Z個資源。 在這樣的設置中存儲所有的IP地址/主機有點難。

所以我想就目前而言,獲取信息最簡單的方法你正在尋找:

  1. 查找查詢文本
  2. 在代碼中查找該查詢
  3. 添加自定義登錄時看到它已經執行。

此外,我鼓勵您在我們的feedback portal上創建一個項目,以便最終收集投票並進入我們的積壓工作。

希望它有幫助。 Andrejs

+0

謝謝,但這個建議不適用於使用實體框架的ASP.Net應用程序,因爲我們在編寫LINQ查詢的代碼中,實體框架隨後轉換爲SQL,因此我們無法在SQL中搜索我們的代碼。您不需要跟蹤請求它的每個IP地址,只需要服務器操作名稱即可。此信息已在Application Insights(AI)中進行了跟蹤,它只是缺少一種很好的方式來搜索它並將其鏈接到查詢性能(QP)中的查詢ID ....您擁有查詢ID,這將非常棒能夠在AI上進行搜索。但是AI和QP之間更緊密的互操作性會很好。 –

+0

在反饋門戶中添加了新項目:https://feedback.azure.com/forums/217321-sql-database/suggestions/17311495-add-better-interoperability-with-application-insig –

0

我有完全一樣的需求(表決功能請求)。可能的解決方法(尚未嘗試)是在將數據發送到數據庫服務器之前使用IDbCommandInterceptor修改sql。這個想法是在開始時添加一個註釋來標記方法/代碼。

1

如果由於使用Entity Framwork而無法在代碼中查找查詢,則只需使用幾行代碼即可記錄所有查詢。我還添加了堆棧跟蹤,以便知道每個查詢被調用的位置。

在你的DbContext類的構造函數中添加以下代碼:

Database.Log = (sql => 
      { 
       System.Diagnostics.Debug.WriteLine(System.Environment.StackTrace); 
       System.Diagnostics.Debug.WriteLine(sql); 
      }); 
+1

謝謝@FranciscoGoldenstein ...這是一個好主意。 –