2010-02-11 108 views
5

我有一个应用程序从twitter中加载大量数据。我们已经开始注意到一些性能问题,所以我为应用程序数据库设置了SQL Profiler。我注意到下面的SQL语句正在执行,但不会出现在我的代码中的任何地方。因此,我假设SQL Server 2005或ColdFusion 8出于某种原因正在添加这些语句。ColdFusion执行不需要的SQL语句

  1. SET TRANSACTION ISOLATION LEVEL READ COMMITTED
  2. SET FMTONLY ON select Title from Links where 1=2 SET FMTONLY OFF
  3. exec [sys].sp_datatype_info_90 -9,@ODBCVer=4
  4. EXEC sp_executesql N'set implicit_transactions off select USER_NAME() select usertype,type,name from systypes where usertype>=257'
  5. EXEC sp_execute 16,'iTunes Store'
  6. exec sp_unprepare 28
  • 我的代码中没有任何cftransaction's
  • 我的所有查询都是从cfqueries中运行的。 (无存储过程)
  • 我从来没有运行在我的代码
  • 所有这些声明是从我的数据库的用户帐户运行专门设立我的web应用程序
  • 在#5中的陈述的任何地方执行或exec语句和#6被复制与许多不同的数字
  • 本声明#5复制与许多不同的字符串

为什么要添加这些语句,是他们需要的,如果不是我怎么能阻止他们?

回答

4

1,2,3,4可在“正常” ColdFusion代码来解释 - 假设你在版本8或9。它做各种各样的以确保数据库服务器能够并准备好自动返回ColdFusion作为CFQUERY的一部分请求的信息,即使它可能没有在您的实际查询中明确地调用。

http://www.forta.com/blog/index.cfm/2007/7/6/ColdFusion-8-Can-Return-Identity-Values

我不知道5和6都在做。

另外,你使用的是Adobe提供的MS SQL驱动程序还是使用MS JDBC SQL驱动程序?使用两个驱动程序之间有一些差异:

http://cfsearching.blogspot.com/2008/03/cf8-ms-jdbc-12-driver-and-for-my-next.html

2

在profiler中看到语句显示你并没有真正从代码中明确地发送你自己并不是不正常的。

但是,这是关键的一点 - 你不明确给他们,但他们为你执行你怎么做他们的动作/的结果隐式进行。

例如如果你在VB6中打开了一个记录集然后迭代它,你会看到(例如)sp_cursor调用通过profiler - 现在这些并没有被代码显式调用,而是由于ADO在所连接的记录集中前进。

我希望我做了一些某种意义上说