How do I obtain a Query Execution Plan in SQL Server?

前端 未结 12 1898
不知归路
不知归路 2020-11-21 04:17

In Microsoft SQL Server how can I get a query execution plan for a query / stored procedure?

12条回答
  •  执笔经年
    2020-11-21 05:01

    Here's one important thing to know in addition to everything said before.

    Query plans are often too complex to be represented by the built-in XML column type which has a limitation of 127 levels of nested elements. That is one of the reasons why sys.dm_exec_query_plan may return NULL or even throw an error in earlier MS SQL versions, so generally it's safer to use sys.dm_exec_text_query_plan instead. The latter also has a useful bonus feature of selecting a plan for a particular statement rather than the whole batch. Here's how you use it to view plans for currently running statements:

    SELECT p.query_plan
    FROM sys.dm_exec_requests AS r
    OUTER APPLY sys.dm_exec_text_query_plan(
                    r.plan_handle,
                    r.statement_start_offset,
                    r.statement_end_offset) AS p
    

    The text column in the resulting table is however not very handy compared to an XML column. To be able to click on the result to be opened in a separate tab as a diagram, without having to save its contents to a file, you can use a little trick (remember you cannot just use CAST(... AS XML)), although this will only work for a single row:

    SELECT Tag = 1, Parent = NULL, [ShowPlanXML!1!!XMLTEXT] = query_plan
    FROM sys.dm_exec_text_query_plan(
                    -- set these variables or copy values
                    -- from the results of the above query
                    @plan_handle,
                    @statement_start_offset,
                    @statement_end_offset)
    FOR XML EXPLICIT
    

提交回复
热议问题