[英]How can I use Powershell to see which sql server databases have maintenance plans?
[英]How to find out which queries (or plans) use a particular index on Azure SQL or SQL Server?
我可以從sys.indexes
和sys.dm_db_index_usage_stats
獲得索引使用的總體統計信息,並且可以很容易地看到有問題的索引被大量使用。 但是,我無法確定哪些計划實際使用了該索引。
我的總體目標是確定包含相關索引的最佳列列表,如果這有什么不同的話。 我懷疑當前列表太長,但應用程序太復雜,無法在不驗證假設的情況下確定。
我沒有找到任何可以幫助的系統視圖,我最終只是搜索計划 XML 作為文本來查找索引的名稱。
SELECT query_plan, query_stats.last_execution_time, sql_text.text
FROM sys.dm_exec_cached_plans as cached_plan
CROSS APPLY sys.dm_exec_query_plan(cached_plan.plan_handle) as exec_query_plan
CROSS APPLY sys.dm_exec_sql_text(cached_plan.plan_handle) AS sql_text
INNER JOIN sys.dm_exec_query_stats as query_stats
ON query_stats.plan_handle = cached_plan.plan_handle
WHERE CHARINDEX('INDEX_NAME', CAST(exec_query_plan.query_plan AS NVARCHAR(MAX))) > 0
-- If you would like to see only the index usage instead of everything (like statistics)
--WHERE CHARINDEX('Index="[INDEX_NAME]"', CAST(exec_query_plan.query_plan AS NVARCHAR(MAX))) > 0
-- to eliminate this query itself and other system queries
AND sql_text.text NOT LIKE '%msparam%'
AND sql_text.text NOT LIKE '%sys.%'
-- Optional conditions to narrow down search
--AND sql_text.text NOT LIKE 'MERGE%'
--AND sql_text.text NOT LIKE '%UPDATE%'
--AND sql_text.text NOT LIKE '%INSERT%'
ORDER BY query_stats.last_execution_time DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.