1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
WITH
XMLNAMESPACES ( DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
, HANDLE AS
(
SELECT QS.plan_handle
, TP.query_plan
FROM (
SELECT DISTINCT plan_handle
FROM sys.dm_exec_query_stats
) AS QS
OUTER APPLY sys.dm_exec_query_plan(QS.plan_handle) AS TP
)
SELECT Q.n.value('(@StatementText)[1]', 'VARCHAR(4000)') AS sql_text
, S.i.value('(@PhysicalOp)[1]', 'VARCHAR(128)') AS PhysicalOp
, S.i.value('(./IndexScan/Object/@Database)[1]', 'VARCHAR(128)') AS DatabaseName
, S.i.value('(./IndexScan/Object/@Schema)[1]', 'VARCHAR(128)') AS SchemaName
, S.i.value('(./IndexScan/Object/@Table)[1]', 'VARCHAR(128)') AS TableName
, S.i.value('(./IndexScan/Object/@Index)[1]', 'VARCHAR(128)') AS IndexName
, STUFF
(
(
SELECT DISTINCT ', ' + cg.value('(@Column)[1]', 'VARCHAR(128)')
FROM S.i.nodes('./OutputList/ColumnReference') AS t(cg)
FOR XML PATH('')
),1,2,''
) AS output_columns
, STUFF
(
(
SELECT DISTINCT ', ' + cg.value('(@Column)[1]', 'VARCHAR(128)')
FROM S.i.nodes('./IndexScan/SeekPredicates/SeekPredicateNew//ColumnReference') AS t(cg)
FOR XML PATH('')
),1,2,''
) AS seek_columns
, S.i.value('(./IndexScan/Predicate/ScalarOperator/@ScalarString)[1]', 'VARCHAR(4000)') AS Predicate
, P.usecounts
, PH.query_plan
FROM HANDLE AS PH
INNER JOIN sys.dm_exec_cached_plans AS P
ON PH.plan_handle = P.plan_handle
CROSS APPLY PH.query_plan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/*') AS Q(n)
CROSS APPLY Q.n.nodes('.//RelOp[IndexScan[@Lookup="1"] and IndexScan/Object[@Schema!="[sys]"]]') AS S(i)
OPTION (RECOMPILE, MAXDOP 1); |
Partager