2

我想知道 ColdFusion 是否可以从 Microsoft SQL Server 获取执行计划?甚至是估计的执行计划。最好能查询所有费用。

4

2 回答 2

3

正如@James 发布的链接中提到的,您可以使用多种方法来检索有关执行计划的信息,使用简单的cfquery. 要记住几件事:

  • SET SHOWPLAN选项通常应用于会话连接,这意味着如果您使用连接池(这是不可取的),它们可能会持续到当前请求之外。确保始终在查询结束时禁用该设置 - 即使发生错误。

  • 一些SET SHOWPLAN选项返回多个结果集。CFQuery只返回一个结果集。因此它可能无法捕获所有返回的数据。

  • 大多数系统视图和过程(sys.dm_exec_sql_text等...)都需要提升的权限。数据源用户必须被授予特殊访问权限才能使用这些对象。所以请记住安全隐患。

...要执行 sys.dm_exec_query_plan,用户必须是 sysadmin 固定服务器角色的成员或对服务器具有 VIEW SERVER STATE 权限。


更新: 正如评论中提到的@Travis,SET SHOWPLAN选项必须单独运行。因此,您需要单独的 cfquery 来切换ON|OFF主查询之前和之后的设置。这是一个快速而肮脏的例子。请注意,事务是为了确保始终使用相同的连接。这可能是矫枉过正,但不应该伤害任何东西。

<cftransaction>
    <cftry>
        <!--- note, SHOWPLAN_ALL does NOT execute the SQL --->
        <cfquery name="toggleStats" datasource="someDSN">
            SET SHOWPLAN_ALL ON
        </cfquery>
        <cfquery name="getQueryStats" datasource="someDSN">
            --- some sql query here 
        </cfquery>
        <cfcatch>
            <!--- rethrow and rollback automatically --->
            <cfrethrow>
        </cfcatch>
        <cffinally>
            <!--- always disable the setting --->
            <cfquery name="toggleStats" datasource="someDSN">
                SET SHOWPLAN_ALL OFF
            </cfquery>
        </cffinally>
    </cftry>
</cftransaction>

<cfif structKeyExists(variables, "getQueryStats")>
    <cfdump var="#getQueryStats#" label="Query Statistics">
</cfif>
于 2012-12-07T18:13:36.873 回答
2

这似乎涵盖了您正在寻找的内容

如何获取查询执行计划?

然后把它包起来<cfquery>

于 2012-12-07T17:40:47.373 回答