首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么导致DMV显示空查询计划?

是什么导致DMV显示空查询计划?
EN

Stack Overflow用户
提问于 2013-01-15 04:31:29
回答 1查看 2.6K关注 0票数 1

当我执行这个简单的SP,然后从后面的DMV查询中检查查询计划时,查询计划返回为NULL。但是,如果我注释掉SP中的else块(或将其更改为不引用临时表),DMV查询将显示查询计划。你知道是什么导致了这种差异吗?空查询计划是否意味着没有缓存任何内容?我使用的是SQL Server2008 R2。

代码语言:javascript
复制
CREATE PROCEDURE dbo.SampleSp
(
    @Option TINYINT
)
AS
    DECLARE @RowCount INT;

    -- Get ID into local temp table

    CREATE TABLE #P (ID INT PRIMARY KEY);
    INSERT INTO #P
    VALUES (1), (2)

    IF @Option = 1
    BEGIN
        SELECT ID FROM #P
    END
    ELSE
    BEGIN
        SELECT ID FROM #P
    END
GO

    --Call SP
    EXEC dbo.SampleSp 1
GO
    --DMV Query to find query_plan
    SELECT  
            CP.objtype, 
            CP.usecounts AS Ct, 
            ST.last_execution_time,
            SUBSTRING(Text, (statement_start_offset / 2) + 1, (CASE statement_end_offset WHEN -1 THEN DATALENGTH(Text) ELSE statement_end_offset END  - ((statement_start_offset / 2) + 1))) AS query,
            T.text,
            PL.query_plan
    FROM sys.dm_exec_cached_plans AS CP WITH(NOLOCK)
    CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) AS T
    OUTER APPLY sys.dm_exec_query_plan(CP.plan_handle) AS PL
    LEFT OUTER JOIN sys.dm_exec_query_stats AS ST WITH(NOLOCK) ON ST.plan_handle = CP.plan_handle
    WHERE 1=1
    AND ST.last_execution_time > DATEADD(MINUTE, -5, GETDATE())
    AND T.text LIKE '%SampleSp%'
    AND T.text NOT LIKE '%dm_exec_cached_plans%'
    ORDER BY ST.last_execution_time DESC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 05:37:14

我想我已经弄明白了。在执行完SP中的所有分支之前,该计划似乎将显示为NULL。(您可以通过使用参数值2再次调用SP来查看这一点,然后显示计划。)如果只执行了SP的一部分,SQL Server就会在内部缓存而不是计划(您可以通过查看usecounts以及我为证明这一点所做的一些其他更广泛的测试来了解这一点),但它不会显示在我使用的DMV查询中。这就提出了一个问题:如何仅查看已缓存的SP部分的计划?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14326146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档