Sql-Server

SQL Server - 從 T-SQL Snippet 中查找父源

  • April 28, 2022

我負責的環境有一些相當大的計劃非重用挑戰。我遇到了以下查詢(h/t Brent Ozar 部落格評論員 Michael J Swart),它很好地列出了最嚴重的違規者:

WITH cte AS (
  SELECT COUNT(*) [count], query_hash, min(sql_handle) [sql_handle_example]
  FROM sys.dm_exec_query_stats
  GROUP BY query_hash
  )
SELECT cte.*, t.text [query_text_example]
FROM cte
CROSS APPLY sys.dm_exec_sql_text(sql_handle_example) t
WHERE [count] > 100
ORDER BY [count] DESC

我的挑戰是剪斷

$$ query_text_example $$文本並有效地辨識它是否來自儲存過程,如果是,則在哪個數據庫中。我已經進行了一些Google搜尋和測試,令人費解地難以找到一個解決方案,該解決方案採用查詢文本片段,無論它是否是動態建構的,並準確辨識其父儲存過程。有沒有人有什麼建議?

父母的建議

您可以使用dm_exec_procedure_stats視圖,如果您使用的是 SQL Server 2016 或更高版本,還可以使用dm_exec_function_stats視圖來跟踪標量 UDF。

這兩個視圖都有一個object_id列,可用於通過OBJECT_NAME函式解析過程和函式名稱。sql_handle您可以將它們與或plan_handle列上的各種其他視圖相匹配。

除非您對您關心的單個數據庫執行此操作,否則您可能還需要使用dm_exec_plan_attributes視圖來獲取dbid屬性,該屬性可以用作OBJECT_NAME.

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