報表和快照集的大小限制

管理 Reporting Services 部署的管理員可以透過此文章中的資訊來了解,當報表發行至報表伺服器、在執行階段進行轉譯以及儲存至檔案系統時,報表大小的限制。 此文章也提供有關如何測量報表伺服器資料庫大小的實作指南,並且描述快照集大小對伺服器效能的影響。

已發行報表的大小上限

報表伺服器上報表和模型的大小,是根據您發行至報表伺服器上報表定義 (.rdl) 與報表模型 (.smdl) 檔案的大小來決定。 報表伺服器本身並不會限制您發行之報表的大小。 但是,Microsoft ASP.NET 會限制張貼到伺服器的項目大小上限。 依預設,此限制為 4 MB。 如果您將超出此限制的檔案上傳或發行至報表伺服器,您將收到一個 HTTP 例外狀況。 在此情況下,藉由增加 Machine.config 檔案中 maxRequestLength 元素的值,就可以修改預設值。

儘管報表模型的大小可能非常巨大,但是報表定義很少會超過 4 MB。 而且報表大小通常只在 KB 的範圍之內。 但是,如果您包含內嵌影像,則這些影像的編碼可能會產生超過 4 MB 預設值的大型報表定義。

ASP.NET 會限制公佈之檔案的大小上限,以便減少針對伺服器的阻絕服務的攻擊威脅。 增加上限值會逐漸破壞此限制所提供的一些保護。 只有當您確定增加上限值後的優點,大於任何額外的安全性風險時,才需要這麼做。

請記住,您為 maxRequestLength 元素所設定的值必須大於想要強制執行的實際大小限制。 若要考慮 HTTP 要求大小不可避免的增加,請設定更大的值。 在封裝 SOAP 信封中的所有參數並套用 Base64 編碼之後,就會發生此增加。 Base64 編碼會使原始資料大小增加約 33%。 因此,您為 maxRequestLength 元素所指定的值需要大於實際可用的項目大小約 33%。 例如,如果您為 maxRequestLength 所指定的值為 64 MB,公佈到報表伺服器的報表檔案大小上限實際上應該約會是 48 MB。

記憶體中的報表大小

當您執行報表時,報表大小等於傳回的報表資料量再加上輸出資料流的大小。 Reporting Services 不會限制已轉譯之報表的大小上限。 系統記憶體會決定大小上限。 根據預設,報表伺服器在轉譯報表時會使用所有可用的設定記憶體。 但是,您可以指定組態設定來設定記憶體閾值和記憶體管理原則。 如需詳細資訊,請參閱設定報表伺服器應用程式的可用記憶體

對於任何報表而言,根據所傳回資料的數量以及該報表所使用的轉譯格式,其大小可以有許多不同的變化。 參數化報表可能會因為參數值影響查詢結果的情況,而會變得較大或較小。 所選取的報表輸出格式會對報表大小產生下列幾種影響:

  • HTML 一次只會處理一頁報表, 由於報表以較小的單位進行處理,因此處理特定區塊時僅需要較少的記憶體。

  • PDF、Excel、TIFF、XML 及 CSV 向使用者顯示報表前,會先在記憶體中處理整個報表。

若要測量已轉譯報表的大小,您可以檢視報表執行記錄。 如需詳細資訊,請參閱報表伺服器 ExecutionLog 和 ExecutionLog3 檢視

若要計算磁碟中已轉譯報表的大小,您可以匯出報表,然後將報表儲存到檔案系統。 儲存的檔案包含資料和報表格式資訊。

報表大小唯一的硬限制只會發生在轉譯成 Excel 格式時, 因為工作表不能超過 65,536 個資料列或 256 個資料行。 其他轉譯格式沒有這些限制,因此檔案大小僅受限於伺服器的資源數量。

注意

報表處理及轉譯是在記憶體中處理, 因此,如果您有大型的報表或大量的使用者,請務必先做好容量計劃,以確保您的報表伺服器部署執行方式可以滿足使用者。 如需有關工具和指導方針的詳細資訊,請參閱下列 MSDN 發行集:規劃 Reporting Services 的可擴縮性和效能在 SQL Server 2005 Reporting Services 報表伺服器上使用 Visual Studio 2005 執行負載測試

測量快照集儲存區

任何給定之快照集的大小,會與報表中的資料數量呈現直接正比, 因此會遠大於儲存在報表伺服器上的其他項目。 快照集大小一般會介於數 MB 到數十 MB 之間, 如果您的報表非常大,則可以預期會看到更大的快照集。 報表伺服器資料庫所需的磁碟空間量可以在短時間內快速增加。 磁碟空間增加量取決於您使用快照的頻率,以及設定報表記錄的方式。

reportserverreportservertempdb 兩種資料庫預設都設定為自動成長。 儘管資料庫大小會自動增加,但卻不會自動減少。 如果因為刪除快照集造成 reportserver 資料庫超出其容量,您就必須手動縮減資料庫的大小來復原磁碟空間。 相同的,如果擴充 reportservertempdb 以容納不尋常、極大量的互動式報告功能,磁碟空間配置將會維持這個設定直到您縮小資料庫大小為止。

若要測量報表伺服器資料庫的大小,您可以執行下列 Transact-SQL 命令。 定期計算資料庫大小的總和可以幫助您建立在一段期間內合理預估報表伺服器資料庫的方式。 下列語句會測量目前使用的空間量。 語句假設您使用預設資料庫名稱:

USE ReportServer  
EXEC sp_spaceused  

快照集大小與報表伺服器效能

處理及轉譯報表時,快照集大小會影響伺服器的效能。 轉譯作業對伺服器效能的影響最大,因此如果有大型的快照集,當使用者對報表提出要求時應該會有一些延遲發生。 根據使用者的數量,當快照集大小超過 100 MB 時可能會發生延遲。

若要將大型快照集所造成的效能延遲降到最低,完成下列步驟:

  • 在不同的電腦上部署報表伺服器和 SQL Server 資料庫引擎。

  • 增加更多系統記憶體。

  • 檢閱 MSDN 網站上的「規劃 Reporting Services 的延展性和效能」文件,以了解設定企業報表伺服器的最佳做法。

儲存在報表伺服器資料庫中的快照集數量,是個別儲存的,與效能因素無關, 因此您可以儲存大量的快照集而不會影響伺服器的效能。 您可以永遠保留快照集, 但是,報表記錄是可設定的。 如果報表伺服器管理員降低報表記錄的限制,您可能會遺失原本打算保留的記錄報表。 如果刪除該報表,所有的報告記錄也會隨之刪除。

設定報表處理内容
報表伺服器資料庫 (SSRS 原生模式)
處理大型報表