當您使用 SQL Server 報表服務時,可能會收到 System.OutOfMemoryException 」 錯誤訊息

文章翻譯 文章翻譯
文章編號: 909678 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

當您使用 Microsoft SQL Server 2000 報告的服務,或者您使用 Microsoft SQL Server 2005 報表的服務時,可能會收到下列錯誤訊息:

報表伺服器上發生內部錯誤。
請參閱錯誤記錄檔,以取得更多詳細資料。(rsInternalError)取得線上說明
型別的 System.OutOfMemoryException 擲回例外狀況。
此外,您可能會注意到下列的錯誤訊息會記錄在 SQL Server 報表服務的記錄檔或突然結束,記錄檔:

System.OutOfMemoryException: 型別的 System.OutOfMemoryException 擲回例外狀況。
您可能會注意到下列事件之一記錄 Microsoft Windows 應用程式記錄檔中:

事件 1


aspnet_wp.exe (PID: <PIDNumber>) 已經回收,因為記憶體耗用量超過 <SizeLimit> MB (<Percentage> 百分比的可用 RAM)。

事件 2


伺服應用程式集區 'DefaultAppPool' 的處理序獲得通訊時發生嚴重錯誤與全球資訊網發行服務。處理程序識別碼為 '9132'。資料欄位包含錯誤代碼。

搭配一或多個下列徵狀可能會發生這個問題:
  • 當您嘗試顯示報告時,永遠不會完成報表。
  • 報表看起來似乎停止回應。
  • 當想顯示報告就會顯示空白的畫面。
  • 您會收到下列錯誤訊息:

    基礎連線已關閉
  • 訂閱無法傳送郵件。

發生的原因

此電腦沒有足夠的記憶體可完成要求的作業,就會發生這個問題。

SQL Server 2000 報告服務 」 中的限制會導致某些部分的報表處理會繫結的記憶體。例如,查詢結果處理和物件模型轉譯為繫結的記憶體。

此電腦沒有足夠的記憶體完成要求的作業時一或多個下列條件,則為 True:
  • 報表是太大或太複雜。
  • 其他正在執行的處理序的額外負荷是很高。
  • 電腦的實體記憶體是太小。
有兩個階段來處理報表。有兩個階段是執行和呈現。在執行階段期間或在呈現階段期間,就會發生這個問題。

如果這個問題發生在執行階段期間,發生這個問題很可能是因為太多記憶體的消耗被在查詢結果中傳回的資料。此外,下列因素會影響在執行階段期間的記憶體耗用量:
  • 群組
  • 篩選
  • 彙總
  • 排序
  • 自訂程式碼
如果這個問題發生在呈現階段期間,原因是與相關報表顯示何種資訊,並將報告該資訊的顯示方式。比方說下列因素會影響在呈現階段期間的記憶體耗用量:
  • 數字和類型的控制項
  • 在控制項之間的關聯性
  • 格式設定
  • 所顯示的資料量
如需有關報表處理器元件的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站]:
http://msdn2.microsoft.com/en-us/library/aa179471(SQL.80).aspx

解決方案

如果要解決這個問題,使用下列方法之一。

方法 1

新增到電腦的足夠的實體記憶體。

附註如果您超過 2 GB 的記憶體您可以啟用 / 3GB 切換取得更好的效能 Boot.ini 檔案中。 如需有關如何在 SQL Server 中使用 / 3GB 參數的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
274750如何設定 SQL Server 使用 2 GB 以上實體記憶體

方法 2

排程報告,以在 off-hours 記憶體條件約束是較低時執行。

方法 3

調整 MemoryLimit 依此設定。

附註當呈現報告服務網站透過報表服務,報告服務 Web 服務取得 MemoryLimit 設定從 Machine.config 檔。不過,排程的報表呈現由報表伺服器 」 Windows 服務。在報表伺服器 」 Windows 服務會從 RSReportServer.config 檔案中取得 MemoryLimit 設定值。

如需有關 [MemoryLimit] 設定的詳細資訊,請參閱 < 其他相關資訊 > 一節。

方法 4

升級至 64 位元版本的 Microsoft SQL Server 2005 報表的服務。

方法 5

重新設計報表。如果要執行此動作使用其中一個下列的方法。

方法 A

重新設計報表查詢。您可以重新設計報表查詢以下列方式來減少記憶體耗用量:
  • 在報表查詢中傳回較少的資料。
  • 在報表查詢的 WHERE 子句上使用更好的限制。
  • 將複雜的彙總移到資料來源。

方法 B

匯出報表,到不同的格式。您可以使用不同的格式顯示報表,以減少記憶體耗用量。下表列出順序從大部分的記憶體耗用量到最小記憶體耗用量的幾個匯出格式。
摺疊此表格展開此表格
格式描述
Microsoft Excel呈現在 Excel 中的報表
影像 (TIFF)將報表呈現為頁面為導向的格式中的靜態圖像
PDF呈現報表中可攜式的文件格式 (PDF)
HTML呈現在 HTML 報表,以瀏覽器
CSV呈現報表中以逗號分隔的格式 ; 一個 CSV 檔案格式與相關聯的檢視工具中開啟報表
XML呈現在 XML 中; 報表於瀏覽器中開啟報表
附註如果不套用 XSLT 轉換則這個格式會消耗較少的記憶體比 CSV 格式會消耗。

方法 C

簡化報表設計。您可以下列方式簡化報表設計來減少記憶體耗用量:
  • 在報表中包含較少的資料區域或控制項。
  • 使用鑽研報表來顯示詳細資料。
此外,如果報表的目的只是資料收集您可以使用其他 Microsoft 產品的較佳的效能。比方說,您可以使用資料轉換服務 」 (DTS) 或 Microsoft SQL Server 2005 整合服務。

範例

下列範例示範如何解決這個問題。 請看下列的範例:
  • 無法呈現傳回 160 網頁報表管理員 」 中的報表,PDF 格式和 Excel 格式。時使用 8.5 乘 11 英吋頁面大小,報表可能遠超過 250 的頁面。
  • 報表資料來源傳回 500 百萬位元組 (MB) 的資料到報表伺服器。通常,SQL Server 2000 報表服務需要二到三倍的資料集所使用的記憶體量。 因此,SQL Server 2000 報表服務需要幾乎 1.5 GB 的記憶體來呈現報表。
如果要解決這個問題,在這個範例中,重新設計報表,這樣報表就會顯示摘要資料只為有限的一組篩選條件值。 此外,請確定提取報表資料的資料庫查詢中發生彙總,彙總不位於報表本身。 這些方法有助於大幅減少傳回給報表伺服器的資料量。因此,報表呈現更快速地成功。

其他相關資訊

當您使用 [SQL Server 2000 報告服務可能會遭遇記憶體相關的問題所造成發生下列錯誤情況之一:
  • 就會引發 System.OutOfMemoryException 錯誤。
  • 達到記憶體限制。
錯誤狀況之間的主要差異在於層級的錯誤條件會攔截和處理。

System.OutOfMemoryException 錯誤是當作業向系統要求更多的記憶體,而系統無法提供記憶體時,就會引發由 SQL Server 2000 報表服務的錯誤。此錯誤時 SQL Server 2000 報表服務關機程序不安全的方式。關機] 是不安全的因為 SQL Server 2000 報表服務共用執行要求間的資源。因此,SQL Server 2000 報表服務不能保證資料是為所有要求仍然安全。

記憶體限制是一組設定來協助保護系統避免潛在 destabilizing 條件。 比方說限制幫助防止報表伺服器的記憶體處理從使用太多記憶體。透過 MemoryLimit 設定,並透過 MaximumMemoryLimit RSReportServer.config 檔中定義的設定,會指定記憶體限制。當達到記憶體限制時,Microsoft.NET Framework 會引發錯誤 (SQL Server 2000 報表服務實際執行的記憶體用完前)。

您可以呈現報表從一個網站或從排定的工作。因此,錯誤狀況可能會發生在兩個不同的環境,在 [SQL Server 2000 報告服務。環境如下所示:
  • 報告服務 Web 服務
  • 報表伺服器 」 Windows 服務
因此,存在下列的錯誤狀況和環境的組合。

報告服務 Web 服務與 System.OutOfMemoryException 錯誤

在 SQL Server 2000 報表服務記錄檔中記錄的例外狀況訊息和類似下列訊息的關機郵件 (ReportServerService_ <timestamp>.log):

w3wp! 庫! 1b3c! 07/11/2005年-10:38:00:: e 錯誤: 找到 System.OutOfMemoryException 例外狀況: Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 型別 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 擲回的例外狀況。---> Microsoft.ReportingServices.ReportRendering.ReportRenderingException: 型別 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 擲回的例外狀況。---> System.OutOfMemoryException: 型別 System.OutOfMemoryException 擲回的例外狀況。

w3wp! 程式庫! 1b3c! 07/11/2005年-10:38:00:: e 錯誤: 結束工作者處理序
附註根據預設 ReportServerService_ <timestamp>.log 檔案位於下列位置:
\Microsoft SQL Server\ <Instance of SQL Server> \Reporting Services\LogFiles
此外,應用程式記錄檔會記錄類似下列的事件的事件:


鍵入事件: 警告
事件來源: W3SVC
事件類別: 無
事件識別碼: 1011年
日期: Date
時間: Time
使用者: N/A
電腦: ComputerName
描述:
伺服應用程式集區 'DefaultAppPool' 的處理序獲得通訊時發生嚴重錯誤與全球資訊網發行服務。處理程序識別碼為 '9132'。資料欄位包含錯誤代碼。

SQL Server 2000 報表服務無法妥善處理這個錯誤。報告服務 Web 服務會攔截例外狀況,並關機程序。您必須重新送出要求。

如果要解決這個問題,可以新增更多實體記憶體到系統,或減少記憶體耗用量,其他處理程序。

在理想的情況下,您可以調整 MemoryLimit 設定或 應用程式集區 設定的 Microsoft 網際網路資訊服務 (IIS) 6.0 之前發生記憶體不足狀況攔截到錯誤時。因此,處理程序是處理更多依正常程序。您必須試驗一下此設定,您一定會先到達記憶體限制不保證。

報告服務 Web 服務與記憶體限制

訊息被記錄在 Windows 事件記錄檔和 SQL Server 2000 報表服務記錄檔中。報告服務 Web 服務記錄檔指出處理程序正在關閉。不過,SQL Server 2000 報告服務不會控制關機],而且無法記錄關於關機] 的錯誤資訊。

您可能會注意到下列事件之一記錄應用程式記錄檔中:

事件 1


aspnet_wp.exe (PID: <PIDNumber>) 已經回收,因為記憶體耗用量超過 <SizeLimit> MB (<Percentage> 百分比的可用 RAM)。

事件 2


處理序識別碼為 '2420' 伺服應用程式集區 'DefaultAppPool' 的工作者處理序已要求回收,因為它達到其虛擬記憶體限制。

當達到記憶體限制時,Microsoft ASP.NET 或 IIS 6.0 會處理這個錯誤,並關機報告服務 Web 服務。記憶體限制所有指定由 ASP.NET 或 IIS 6.0,且不受 SQL Server 2000 報告服務。

您可以變更 <processmodel>] 下的記憶體限制 Machine.config 檔中的區段。

附註如果您在原生模式下 Machine.config 檔不會使用執行 IIS 6.0。記憶體限制是由應用程式集區,在 IIS 6.0 中的內容所控制。

如需有關在 ASP.NET 和 IIS 6.0 中的記憶體組態的詳細資訊,請造訪下列 MSDN 網站:

「 報表伺服器 」 Windows 服務及 System.OutOfMemoryException 錯誤

報表不傳遞至檔案共用,或傳送給訂閱的收件者。當排定呈現程序會自動重新啟動時,處理程序嘗試再次執行相同的訂閱,做為復原程序的一部分。在 SQL Server 2000 報表服務記錄檔中記錄類似下列的錯誤訊息的錯誤訊息:

ReportingServicesService! 程式庫! 618! 7/9/2003年-16: 06: 01:: 狀態: 錯誤: 型別 System.OutOfMemoryException 擲回的例外狀況。
ReportingServicesService! 通知! 618! 7/9/2003年-16: 06: 01:: 傳遞提供者擲回的錯誤: System.OutOfMemoryException: 型別 System.OutOfMemoryException 擲回的例外狀況。
ReportingServicesService! 通知! 618! 7/9/2003年-16: 06: 01:: 通知 380e6cd2-3e3d-4549-9ed5-9fb6b42266b6 完成。成功: False,狀態: 錯誤: 型別 System.OutOfMemoryException 擲回的例外狀況,DeliveryExtension: 報告伺服器電子郵件,報告: 發票,嘗試 0
ReportingServicesService! dbpolling! 618! 7/9/2003年-16: 06: 01:: NotificationPolling 完成處理的項目 380e6cd2-3e3d-4549-9ed5-9fb6b42266b6
ReportingServicesService! servicecontroller! 568! 7/9/2003年-16: 09: 30:: i 資訊: 要求的記憶體限制式應用程式網域回收
ReportingServicesService! servicecontroller! 568! 7/9/2003年-16: 09: 30:: i INFO: 回收服務從預設網域
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 09: 30:: EventPolling 輪詢停止服務
ReportingServicesService! dbpolling! 87 c! 7/9/2003年-16: 09: 30:: EventPolling 結束停駐點的活動訊號執行緒。
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 09: 30:: NotificationPolling 輪詢服務已停止
ReportingServicesService! dbpolling! 880! 7/9/2003年-16: 09: 30:: NotificationPolling 活動訊號執行緒結束停駐點。
ReportingServicesService! dbpolling! 568! 7/9/2003年-16: 09: 30:: SchedulePolling 輪詢停止服務
報表伺服器 」 Windows 服務會攔截例外狀況,及關機程序。這不是一個非失誤性的程序,而任何其他處理程序中的要求會遺失。

您不能設定任何設定,以避免這個問題。藉由在電腦上的記憶體數量以及記憶體耗用量,其他處理程序,這個問題會受到影響。

如果要解決這個問題,可以新增更多實體記憶體到電腦,或減少記憶體耗用量,其他處理程序。

報表伺服器 」 Windows 服務,而且記憶體限制

報表不傳遞至檔案共用,或傳送給訂閱的收件者。訂閱的 [狀態] 屬性具有 「 執行緒中止 」 值。錯誤訊息類似下列的錯誤訊息記錄在 SQL Server 2000 報表服務記錄檔:

ReportingServicesService! reportrendering! 17a8! 09/28/2005年-16: 10: 12:: e 錯誤: 擲回 Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 型別 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 擲回的例外狀況,; 資訊: Microsoft.ReportingServices.ReportProcessing.WrapperReportRenderingException: 型別 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 擲回的例外狀況。---> Microsoft.ReportingServices.ReportRendering.ReportRenderingException: 型別 Microsoft.ReportingServices.ReportRendering.ReportRenderingException 擲回的例外狀況。---> System.threading.ThreadAbortException: 執行緒已被中止。
ReportingServicesService! runningjobs! 17a8! 09/28/2005年-16: 10: 12:: i INFO: CancelableJobExecution.Execute 抓到某些其他的執行緒中止例外
ReportingServicesService! 程式庫! 17a8! 09/28/2005年-16: 10: 12:: i 資訊: 初始化 EnableExecutionLogging] 設為 'True' 做為伺服器系統屬性中指定。
ReportingServicesService! runningjobs! 1810年! 09/28/2005年-16: 10: 12:: i INFO: CancelableJobExecution.Execute 抓到某些其他的執行緒中止例外
ReportingServicesService! 程式庫! 1810年! 09/28/2005年-16: 10: 12:: i 資訊: 初始化 EnableExecutionLogging] 設為 'True' 做為伺服器系統屬性中指定。
ReportingServicesService! dbpolling! 1810年! 09/28/2005年-16: 10: 12:: 將 requeued NotificationPolling 不再處理項目 6e786bb5-3e4d-462a-92 fc-2942e6aec007,
ReportingServicesService! dbpolling! 1810年! 09/28/2005年-16: 10: 12:: 佇列背景工作執行緒攔截到未處理的例外狀況: System.Threading.ThreadAbortException: 執行緒已被中止。
在 Microsoft.ReportingServices.library.NotificationQueueWorker.HandleNotification(QueueItem item)
在 Microsoft.ReportingServices.library.NotificationQueueWorker.QueueWorker(QueueItem item)
在 Microsoft.ReportingServices.Library.QueuePollWorker.WorkItemStart (物件狀態)
附註這些訊息被後面突然結束到記錄檔。

報表伺服器 」 Windows 服務會嘗試完成現有的要求。此外,報表伺服器 」 Windows 服務會監視其本身的組態設定,以確定要求的作業不會超過記憶體限制。如果要求的作業不會超過記憶體限制,報表伺服器 」 Windows 服務會停止處理序。會在報表伺服器 」 Windows 服務自動變成失敗的工作啟動工作清單。當報表伺服器 」 Windows 服務重新啟動時,報表伺服器 」 Windows 服務會嘗試重新執行工作。

RSReportServer.config 檔案中的兩個設定會影響記憶體組態。MaximumMemoryLimit 設定,並在 <service>[MemoryLimit 設定了特定的項目 標記。

這些值代表實體記憶體的百分比。如果記憶體消耗量的現有要求到達 MemoryLimit 的設定值指定的百分比,報表伺服器 」 Windows 服務會停止採取額外的要求。但是,繼續目前正在進行中的要求。 之後的可用記憶體小於 MemoryLimit 的設定值指定的百分比,會再次接受新的要求。

如果記憶體消耗量的現有要求到達 MaximumMemoryLimit 的設定值指定的百分比,報表伺服器應用程式定義域會終止。

這些設定模仿 <processmodel>] 下的記憶體限制 Machine.config 檔中區段和有效的運作方式相同。這些設定會提供報告服務 Web 服務和報表伺服器 」 Windows 服務之間的一致性。

?考

如需詳細資訊請參閱下列主題在 SQL Server 線上叢書:
  • 如何新增鑽研報表連結 (報表設計工具)
  • 匯出報表
  • RSReportServer 組態檔
  • 回收報告伺服器應用程式定義域

屬性

文章編號: 909678 - 上次校閱: 2009年11月24日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Reporting Services
  • Microsoft SQL Server 2005 Reporting Services
關鍵字:?
kbmt kbexpertiseadvanced kbprb KB909678 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:909678
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com