Sql-Server
sp_Blitzcache 不會返回與給定查詢的 sys.dm_exec_query_stats 一樣多的結果
我正在嘗試使用以下方法查找特定查詢集(更新的查詢
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 和表名的開頭之間可以有多個空格、製表符、甚至換行符或註釋。表名也可以以數據庫名或模式名作為前綴。
因此,我不推薦使用這種技術來查找更新特定表的查詢。