Sql-Server
使用探測殘差辨識執行計劃
我正在嘗試找出具有
Probe Residual
.需要了解以下內容
- 哪個物理和邏輯運算符有這個
Probe Residual
- 查詢中該運算符 的**Cost%**是多少
- 相關執行計劃
- 查詢文本
以下是我嘗試過的——但我無法獲得其他細節。如何獲取這些詳細資訊?
注意:我使用的是 SQL Server 2012
WITH XMLNAMESPACES ( DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan' ) SELECT DECP.cacheobjtype, DECP.objtype, DECP.plan_handle, DEQP.objectid, DEQP.query_plan, DEST.[text] FROM sys.dm_exec_cached_plans AS DECP CROSS APPLY sys.dm_exec_query_plan(DECP.plan_handle) AS DEQP CROSS APPLY sys.dm_exec_sql_text(DECP.plan_handle) AS DEST WHERE 1 = DEQP.query_plan.exist( '//RelOp[ @PhysicalOp = "Hash Match" ]')
探針殘差範例
以下來自 Grant Fritchey 和 Rob Farley 的部落格/文章的參考資料
您要做的是在交叉應用中使用nodes() 方法(xml 數據類型)
RelOp
應用於節點上的 shred,這樣您就可以使用value() 方法(xml 數據類型)來獲取您正在尋找的屬性值。您正在專門尋找
RelOp
具有節點的Hash/ProbeResidual
節點,因此您應該在nodes()
函式的 XQuery 參數中的謂詞中使用它。WITH xmlnamespaces(DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan') SELECT DEQP.query_plan, DEST.text, RO.X.value('@PhysicalOp', 'nvarchar(50)') as PhysicalOp, RO.X.value('@LogicalOp', 'nvarchar(50)') as LogicalOp, RO.X.value('@EstimatedTotalSubtreeCost', 'float') as EstimatedTotalSubtreeCost FROM sys.dm_exec_cached_plans AS DECP CROSS APPLY sys.dm_exec_query_plan(DECP.plan_handle) AS DEQP CROSS APPLY sys.dm_exec_sql_text(DECP.plan_handle) as DEST CROSS APPLY DEQP.query_plan.nodes('//RelOp[Hash/ProbeResidual]') as RO(X);