我想知道 ColdFusion 是否可以从 Microsoft SQL Server 获取执行计划?甚至是估计的执行计划。最好能查询所有费用。
问问题
291 次
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
于 2012-12-07T17:40:47.373 回答