Sql server ColdFusion中的SQL执行计划
我想知道ColdFusion是否可以从Microsoft SQL Server获得执行计划? 甚至是估计的执行计划。Sql server ColdFusion中的SQL执行计划,sql-server,coldfusion,Sql Server,Coldfusion,我想知道ColdFusion是否可以从Microsoft SQL Server获得执行计划? 甚至是估计的执行计划。 如果能得到所有成本的查询,那就太好了。这似乎涵盖了您要找的内容 然后将其包装在中,正如@James post链接中提到的,有几种方法可用于使用简单的cfquery检索有关执行计划的信息。要记住以下几点: 选项通常应用于会话连接,这意味着如果使用连接池(这是不可取的),它们可能会持续存在于当前请求之外。确保在查询结束时始终禁用设置,即使出现错误 一些SET SHOWPLAN选项
如果能得到所有成本的查询,那就太好了。这似乎涵盖了您要找的内容
然后将其包装在
中,正如@James post链接中提到的,有几种方法可用于使用简单的cfquery
检索有关执行计划的信息。要记住以下几点:
- 选项通常应用于会话连接,这意味着如果使用连接池(这是不可取的),它们可能会持续存在于当前请求之外。确保在查询结束时始终禁用设置,即使出现错误
- 一些
选项返回多个结果集SET SHOWPLAN
仅返回单个结果集。因此,它可能无法捕获返回的所有数据CFQuery
- 大多数系统视图和过程(,等等)需要提升权限。必须授予数据源用户使用这些对象的特殊访问权限。因此,请记住安全问题
更新: 正如@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>
将SHOWPLAN\u设置为全部打开
---这里有一些sql查询
将SHOWPLAN\u全部关闭
像set showplan\u all
、set showplan\u text
、set showplan\u xml
这样的命令不能在存储过程中运行,也不能作为单个命令运行,因此我理解这意味着您还需要多个cfquery标记来设置它,发送查询,然后再发送另一个来设置。可以使用showplan_xml获取xml,然后使用cf对其进行解析。我的sql server连接没有连接,因此我无法测试任何东西,因此我没有足够的信心做出可能的回答。@Travis-是的,这也是我的理解。(当然,我在查询分析器之外很少使用这些命令。)您可以在主查询之前和之后运行单独的查询来切换设置on\off
。我可能会将这三个都打包到一个事务中,以确保它保持相同的dsn连接。后者可能有点过火,但不会造成任何伤害。这也可能是假设你的SQL Server在你的Web服务器上,但情况可能并非如此,所以不管怎样,它都是不成功的,不管怎样,它都是不成功的,我不确定我是否同意。哪一部分?@Travis-不,结果只是一个字符串,“对于应用程序,以nvarchar(max)的形式返回输出…其中XML输出随后被其他工具使用。”。显示结果时,SSMS可能会合并一些临时文件。但从cfquery来看,它只是getQueryStats[“MICROSOFT SQL SERVER 2005 XML SHOWPLAN”][rowNumber]
。我第一次看到这个问题时就阅读了这个链接,没有看到任何可能进入cfquery标记的内容。我遗漏了什么吗?@James-上面的代码经过测试了吗?IIRCGO
不能在jdbc中使用。它是仅由MS SQL工具(查询分析器等)识别的非标准关键字。另外,请参阅我的回复,了解有关持续性showplan
设置的重要说明best@James莫勒-哈?你的评论是针对丹还是针对我?我想说的是,Leigh的回答比我更能回答最初的问题。