在 ColdFusion 管理员中监控 SQL 事务?

在 ColdFusion 管理员中监控 SQL 事务?

使用 CF9、IIS 和 MSSQL,有没有办法监视脚本发送的 SQL 命令?最好是显示原始查询的方法。

在看到 WEBrick 和 Ruby on Rails 实际上将生成的查询转储到控制台后,我有了这个想法,并想知道 CF9 是否有类似的东西。

答案1

您可以使用 SQL Server Profiler 来执行此操作。您必须设置跟踪以准确捕获您想要的内容,但它肯定会为您提供原始查询。

看一下这篇 MSDN 文章有关 Profiler 的信息。

答案2

有多种解决方案。正如@squillman 所指出的,您可以通过 Profiler 在 SQL Server 中查看它。但仅在 CF 中,您还有其他选择。

  • 您可以打开 CF 的调试输出以在请求结束时查看查询信息。当然,这样做有利有弊。如果是在开发中,这通常很好。在生产中,最好避免这样做(即使您限制了可以查看调试输出的 IP 地址,因为许多人断言,即使其他用户仍需为生成的调试付费)。
  • 您还可以自己在代码中记录信息。从 CF7 开始,就有了一个新的 RESULT 属性,它保存一个包含查询数据(包括 SQL 语句)的结构。您可以使用 CFLOG、CFTRACE 和其他标签(或相关脚本函数)将其写出。
  • 您还可以让 CF 自行记录。CF8 中添加了一个鲜为人知的功能,在数据源定义(在 CF Admin 中)的“高级设置”中有一个新复选框,可让您“记录活动”。请注意,它非常冗长。
  • 您还可以使用各种 CF 服务器监视器中的内置监视功能,无论是内置于 CF Enterprise(或 Developer,但不是 Standard)中的免费功能,还是第三方功能 FusionReactor 和 SeeFusion。不过,CFSM 仅关注慢速查询。FR 和 SF 可以向您显示给定请求中的每个查询(或服务器上的所有查询,包括与任何查询无关的查询,如客户端变量清除等)。我特别喜欢 FR 的一点是它会记录每个查询(如果您启用查询日志记录),而 SF 再次仅记录慢速查询。(每个都可以更改为另一个替代方案。)
  • 最后,所有这些工具都通过包装 JDBC 驱动程序来记录查询。您也可以不使用那些工具,而是使用许多 jdbc 包装器替代方案中的任意一种来手动记录查询。只需在 Google 上搜索 jdbc 包装器,您就会找到很多。

我还在一篇博客文章中详细讨论了所有这些选项,虽然它主要关注监视 CF 中的 ORM 查询,但它同样适用于 CF 生成的任何查询(以及任何 CFML 引擎):监视 ORM 数据库交互:任何 CFML 引擎上的 Hibernate、Transfer 等

最后,我要指出的是,就使用 SQL Server Profiler 而言,它也有其优点和缺点(它可以生成有关可用查询的更多详细信息作为选项,甚至包括每个查询的执行计划图,这很好,但它也像任何监控一样,根据配置方式的不同,存在一些开销风险。存在许多解决该问题和解决方案的资源。

希望这有帮助。

相关内容