2010-02-11 93 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在所連接的記錄集中前進。

我希望我做了一些某種意義上說