您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_find_qplan

语法


sp_find_qplan <pattern>[, group ]

参数

<pattern>

是要在查询或抽象计划的文本中查找的字符串。

<group>

是抽象计划组的名称。

示例

示例 1

报告在查询中具有字符串“from titles”的所有抽象计划:


sp_find_qplan "%from titles%"

gid id          text
--- ----------- --------------------------------------------------
2   921054317 select count(*) from titles
2   921054317
         ( plan
        ( i_scan t_pub_id_ix titles )
        ( )
)
( prop titles
        ( parallel 1 )
        ( prefetch 16 )
        ( lru )
)
5   937054374 select type, avg(price) from titles group by type
5   937054374
         ( plan
        ( store Worktab1
                ( i_scan type_price titles )
        )
        ( t_scan ( work_t Worktab1 ) )
)
( prop titles
        ( parallel 1 )
        ( prefetch 16 )
        ( lru )

示例 2

查找包含表扫描运算符的所有计划:


sp_find_qplan "%t_scan%"

示例 3

使用范围模式匹配在 dev_plans 组的计划中查找字符串,例如“table1”、“table2”等:


sp_find_qplan "%table[0-9]%", dev_plans

用法

使用 sp_find_qplan 时,还存在一些其它注意事项:

  • 使用 sp_find_qplan 可以查找包含特定字符串的抽象计划。既可以与查询文本中的字符串匹配,也可以与抽象计划文本中的字符串匹配。

  • 对于每个匹配的计划,sp_find_qplan 都将输出组 ID、计划 ID、查询文本和抽象计划文本。

  • 如果提供组名,则 sp_find_qplan 将在指定的组中搜索字符串。如果未提供组名,则 sp_find_plan 将搜索所有组的所有查询和计划。

  • 除非要搜索的字符串位于查询或计划的开头或末尾,否则必须像示例中那样提供“%”通配符。可以使用任何 Transact-SQL 模式匹配语法,如示例 3 中所示。

  • sysqueryplans 中的查询文本被拆分为 255 字节的列值。sp_find_qplan 可能会漏掉跨越其中某个边界的匹配项,但将找到所有少于 127 字节的匹配项(即使这些匹配项跨两行)。