首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

解決 SQL Server 2008 執行大型腳本出現 System.OutOfMemoryException 錯誤

     編輯:關於SqlServer

問題現象

在 SQL Server 2008 Management Studio 中執行超過 100 MB 的大型 SQL 腳本檔案時,拋出 System.OutOfMemoryException 異常,導致執行中斷。

根本原因

管理工作站記憶體不足,無法一次載入並解析龐大的腳本內容。Microsoft 官方說明指出,報表服務的記憶體限制會影響查詢結果處理與物件模型轉譯,尤其在執行階段(群組、篩選、彙總、排序、自訂代碼)與轉譯階段(控制項數量、關聯、格式、資料量)均可能耗盡記憶體。

解決方案

方法一:拆分腳本檔案(最直接有效)

將大型 .sql 檔案切分為多個較小的檔案(各 < 50 MB),依序執行,避免單次記憶體壓力過大。

方法二:增加實體記憶體

為伺服器或工作站加裝 RAM。若超過 2 GB,可在 Boot.ini 啟用 /3GB 開關以提升使用者模式位址空間。參考:KB 274750

方法三:排程於離峰時段執行

在系統負載較低的時段(如深夜)執行大型腳本,減少記憶體競爭。

方法四:調整記憶體配置

  • 報表服務 Web 服務從 Machine.config 讀取設定。
  • 排程報表由 Windows 服務執行,設定於 RSReportServer.config。

方法五:升級至 64 位元 SQL Server Reporting Services

64 位元版本可突破 32 位元 2 GB 使用者模式記憶體限制,徹底解決大型報表轉譯記憶體不足問題。

方法六:重新設計報表與查詢

  • 優化查詢:減少回傳資料列、加強 WHERE 條件、將彙總邏輯下推至資料庫層。
  • 選擇低記憶體輸出格式:依記憶體消耗遞減:Excel > TIFF 影像 > PDF > HTML > CSV > XML(無 XSLT)。
  • 簡化報表版面:減少資料區域與控制項,使用鑽取報表呈現細節;若僅為資料匯出,考慮使用 DTS/SSIS 替代。

實戰範例

某 160 頁 PDF 報表,資料集 500 MB,轉譯需 ~1.5 GB 記憶體。解決方式:修改報表僅顯示篩選後的摘要資料,並將彙總移至資料庫查詢執行,成功將資料量大幅縮減,順利完成轉譯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved