Sql-Server
SQL Server - 從 T-SQL Snippet 中查找父源
我負責的環境有一些相當大的計劃非重用挑戰。我遇到了以下查詢(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
.