Sql-Server

sp_Blitzcache 不會返回與給定查詢的 sys.dm_exec_query_stats 一樣多的結果

  • April 3, 2020

我正在嘗試使用以下方法查找特定查詢集(更新的查詢MyTable)的計劃sp_blitzcache

EXEC sp_Blitzcache @SlowlySearchPlansFor = 'UPDATE [My Table]'

但是,當我執行以下查詢時,這將返回 3 個結果

SELECT  d.name,
       t.text AS TSQL_Text,
       s.creation_time, 
       s.execution_count,
       s.total_worker_time AS total_cpu_time,
       s.total_elapsed_time, 
       s.total_logical_reads, 
       s.total_physical_reads, 
       p.query_plan
FROM    sys.dm_exec_query_stats s
       CROSS APPLY sys.dm_exec_sql_text(s.plan_handle) t
       CROSS APPLY sys.dm_exec_query_plan(s.plan_handle) p
       JOIN sys.databases d
           ON t.dbid = d.database_id
WHERE   t.text LIKE '%UPDATE \[My Table\]%' ESCAPE '\'

它返回得更多。

找到的查詢是否有某種限制sp_blitzcache?例如,是否忽略了低成本查詢?

是的,該參數存在一個已知問題,由於空格而不返回所有結果,如果這也影響到您,我不會感到驚訝:

https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/2202

但是,讓我們縮小一點:您不能依靠計劃記憶體的文本搜尋來查找更新表的所有內容。在單詞 UPDATE 和表名的開頭之間可以有多個空格、製表符、甚至換行符或註釋。表名也可以以數據庫名或模式名作為前綴。

因此,我不推薦使用這種技術來查找更新特定表的查詢。

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