簡體   English   中英

SQL Server 2005在SSMS中快速存儲過程從VBA緩慢

[英]SQL Server 2005 stored procedure fast in SSMS slow from VBA

我有一個存儲過程,從SQL Server Management Studio運行時,這樣調用時一直需要5秒才能運行。

exec dbo.MyStoredProc  '2009-04-30 00:00:00', '2009-04-30 20:00:00' 

當通過VBA從excel電子表格調用時,需要6分鍾(不包括將記錄集復制到工作表所花費的時間.VBA只是簡單地使用ADO連接來返回記錄集。不幸的是,Excel方法是客戶端要求我無法擺脫。

Public Function GenerateSQL(strQueryName As String) As Recordset
Dim rs As Recordset, cm As Command, dbsConn As Connection

Set dbsConn = New ADODB.Connection
dbsConn.Open Configuration.Range("ConnectionString")
Set cm = New ADODB.Command


With cm
    .CommandText = strQueryName
    .CommandType = adCmdStoredProc
    .CommandTimeout = 300
    .ActiveConnection = dbsConn

    Set rs = .Execute()

End With

Set GenerateSQL = rs
End Function

有誰知道為什么會發生這種情況或者我如何開始追蹤正在發生的事情?

謝謝,

史蒂夫

您需要了解的有關此主題的所有內容: 應用程序速度慢,SSMS速度快? 了解性能之謎

我相信我和Steve Homer有同樣的問題。 除了這個問題,我還在eggheadcafe.com上找到了這個帖子。 使用.net時執行速度非常慢 - 在Management Studio中非常快 - totico

答案說它是關於參數嗅探以及它如何影響使用哪個執行計划。 那里的答案特別提到了arithabort set選項以及它如何影響計划的選擇。

現在我只需要了解如何從VBA更改設置選項...

最后,感謝social.msdn.com上的這個論壇條目,我設法做到了。 首先,將多個連接設置為false:

connectionObject.Properties("Multiple Connections") = False

然后在你的連接上使用以下函數來設置arithabort ...

Private Sub OptionSet(ByRef cnn As adodb.Connection)
  Dim cmd As adodb.Command

  Set cmd = New adodb.Command
  With cmd
    Set .ActiveConnection = cnn
    .CommandType = adodb.CommandTypeEnum.adCmdText
    .CommandText = "set arithabort on"
    Call .Execute
  End With
  Set cmd = Nothing
End Sub

使用SQL Server Profiler

  • 在數據庫上設置跟蹤。
  • 將跟蹤僅限制為有問題的存儲過程對象
  • 限制為VBA代碼使用的用戶名

SQL Server Profiler簡介

特別是,檢查連接使用的SET選項 ,並將它們與在SSMS中運行存儲過程時使用的默認值進行比較。

在調用代碼和SSMS之間SET選項不同之前我遇到過各種情況,而且性能差異很大

謝謝,我將看一下跟蹤工具。

回復原始問題的評論

您使用完全相同的參數值嗎?

是的完全相同。

返回多少數據(粗略地) - 行數和列數(並且它們中的任何一個特別大)?

在200行以下,可能有15個字段,其中大多數是有20個字符的varchars。

你可以運行SQL分析器並確認sql是問題還是excel中宏的遺留?

SQL非常難看,底層數據庫架構也是如此,不幸的是在NDA下,所以我無法發布它。 如果查詢是問題,那么管理工作室也不會很慢嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM