2010-03-03 97 views
3

我有一個需要大約2分鐘才能運行的查詢。它在參數或任何方面都不是非常複雜,報告本身並沒有進行任何真正廣泛的處理。基本上只是以一種很好的格式直接輸出數據。 (實際上其中一個報告根本不格式化數據,只是返回一個意圖在excel中操作的扁平表。)爲什麼Reporting Services報告比查詢慢得多?

它不返回大量數據集。

然而,報告需要30分鐘的時間才能運行。

這是什麼原因造成的?

這是針對SQL 2005數據庫的SSRS 2005 btw。

編輯:好的,我發現在報告中加入WITH(NOLOCK)與查詢通過SSMS所花費的時間相同。如果來自報告服務(或本地計算機上的visual studio)的查詢處理方式與從本地計算機上的SSMS來的查詢處理方式相同,爲什麼它們的處理方式會有所不同?我看到在活動監視器中運行SLEEP_WAIT模式幾次查詢,但不被任何東西阻擋...

EDIT2:連接字符串是:

數據源=服務器;初始目錄=數據庫名

+0

只是懷疑,但我懷疑數據源/ ado.net「驅動程序」是問題。我對此有任何其他評論以及我有類似的經歷感興趣。 – Mozy 2010-03-03 23:32:40

+0

您的連接字符串在報表上的數據源的外觀如何? – 2010-03-05 14:03:03

+1

可能相關? http://stackoverflow.com/questions/2283943/fast-query-runs-slow-in-ssrs雖然你的NOLOCK經驗可能不建議。 – 2013-08-12 04:58:17

回答

0

查詢需要很長時間才能運行,或者服務器處理速度慢?一些報告多次調用查詢。例如,如果在一個分頁列表控件的內部有一個子報表,則該報表的每個頁面都會分別調用該查詢。那麼也許報告中的數據會造成延遲?

+0

該報告只會調用一次查詢......並且正如我所說的那樣,報告不會對數據做很多處理。一旦我添加WITH NOLOCK查詢報告在2分鐘內運行... – CodeRedick 2010-03-05 17:21:24

0

查詢返回的數據集有多大?如果報告服務器的大部分時間非常大,則可能與報告呈現所花費的時間有關。要確定您可以查看報表服務器上的ExecutionLog表,以查看TimeRendering與總體執行時間相比是否是一個大數字。

+0

不是那麼大,除了NOLOCK爲什麼會影響報告的速度呢? – CodeRedick 2010-03-26 14:33:37

0

我認爲這並不罕見,但我們研究了類似的問題。

從內存來看,我們注意到的一件事是我們的子報表有參數,我們已經配置了從數據庫查詢的「可能的值」。

我認爲每次運行子報表時,SSRS都會重新查詢參數的可能值(即使您不使用結果,您的報表中也會運行其他任何查詢(&))。

在這種情況下,一旦我們滿意,子報表工作正常,我們移除了查詢參數值並允許「任何值」的查詢,假設父報表不會給我們提供不良參數值。

相關問題