ReportServer2008內(nèi)存管理策略
Rs2008 在內(nèi)存管理方面已經(jīng)有了很大的改變。主要增加了文件緩存,允許把內(nèi)存數(shù)據(jù)卸載到文件緩存中。
而Rs2005 都是把數(shù)據(jù)放到內(nèi)存中。對于大數(shù)據(jù)量的報表而言,很容易出現(xiàn)OutOfMemory 錯誤。
在實際應用中,發(fā)現(xiàn)Rs2008 也經(jīng)常出現(xiàn) OutOfMemory 錯誤。主要有以下幾個原因:
1 物理內(nèi)存過低。
機器只有2G內(nèi)存,特別是64位的機器。
2 同一臺服務器同時承擔兩種角色: 數(shù)據(jù)庫服務器,報表服務器。但沒有限定數(shù)據(jù)庫服務器的占用的最大內(nèi)存。
由于數(shù)據(jù)庫通常會采用貪婪的內(nèi)存策略獲取盡可能多的內(nèi)存,導致報表服務器的內(nèi)存嚴重不足。
3 報表服務器默認的內(nèi)存管理參數(shù)不適用于有大量報表用戶同時使用的情況。默認配置適用于負載均衡的場景。
如果系統(tǒng)經(jīng)常出現(xiàn)負載尖峰(某一時刻有大量報表用戶同時使用的情況),則報表服務器則會從無壓力區(qū)域迅速達到高壓力區(qū)域。出現(xiàn)OutOfMeory,或者拒絕新的請求(503錯誤,服務器狀態(tài)不可用)。
為了改善這種情況,需要對報表服務器內(nèi)存管理策略進行調(diào)整。
在 RsReportServer.config配置文件中增加配置。
該文件一般在C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer目錄下
WorkSetMaxiMum 默認為報表服務器啟動檢測到的最大可用內(nèi)存。
MemoryThreshold 默認是 WorkSetMaxiMum 的90%
MemorySafetyMargin 默認是 WorkSetMaxiMum 的80%
WorkingSetMinimum 默認是 WorkSetMaxiMum 的60%
通過以上討論,強烈建議
1 手工指定 WorkSetMaxiMum 而不是在報表服務器啟動是自動檢測。
2 MemorySafetyMargin 改為 50% ,壓縮低內(nèi)存區(qū)域,使系統(tǒng)從容應對峰值負載情況。
WorkingSetMinimum 設為 WorkSetMaxiMum 25%到 30%
示范:
服務器同時是報表服務器和數(shù)據(jù)庫服務器的情況:
假定內(nèi)存共 24G
Sqlserver最大使用 18G ,1G 給操作系統(tǒng)使用,剩余 5G給報表服務器。
配置如下:
<MemorySafetyMargin>50</MemorySafetyMargin>
<MemoryThreshold>90</MemoryThreshold>
<WorkingSetMaximum>5000000</WorkingSetMaximum>
<WorkingSetMinimum>1500000</WorkingSetMinimum>