報表性能優化方案之數據集緩存與共享

1. 問題描述

對於大數據量報表,若每次直接從數據庫中查詢數據,不只增長數據庫服務器的壓力,也極大的影響了取數的速度從而下降了報表的執行速度,爲此FineReport提供了數據集緩存與共享功能。數據庫

FineReport可先將其數據集查詢的結果緩存下來,對於緩存下來的數據,再次使用到相同數據集時,無需再次鏈接數據庫從新查詢數據,直接使用緩存下來的結果,即便用FineReport的數據集共享機制,達到資源複用,減小取數時間從而提升了報表的展示速度。windows

2. 數據集緩存緩存

緩存分爲緩存至內存和緩存至磁盤。服務器

2.1 緩存至內存大數據

設置方法:默認的就是使用內存緩存即全部數據都保存在內存中,在數據庫查詢窗口能夠看到,以下圖:spa

 

設置後的效果:當執行數據集時就會在將此記過緩存至內存中,下次在執行此數據集時,會直接從內存緩存中取數。操作系統

優缺點:空間資源有限,但效率很高,取數速度快。對象

什麼狀況使用:通常使用率高,且數據量不算太大的報表,可直接使用內存緩存。內存

2.2 緩存至磁盤資源

設置方法:點擊下拉框選擇緩存至磁盤當記錄大於,並設置行數,以下:

 

緩存至磁盤,即將數據緩存到服務器的磁盤中,默認是在C:\Documents and Settings\Administrator\.FineReport8.0\cache(windows操做系統)下。

注:如啓用了磁盤緩存,發現系統目錄下沒有cache文件夾,不要感到驚訝,雖然激活了磁盤緩存,但不是立刻開始把數據寫到磁盤中,而是會考慮系統的實際運行狀況而後再進行處理。

設置後的效果:記錄數默認大於0行:表示從第0條數據開始,使用磁盤緩存。即只採用磁盤緩存,取出的數據是所有放在磁盤中。

記錄數大於如1000行:表示取得的數據前1000條是放入內存中,剩餘部分緩存至磁盤,當用到1000條之外的數據時,就會從磁盤中讀取數據。

優缺點:空間資源又大又便宜,幾乎沒有限制;但效率低,取數速度每每很慢。

什麼狀況使用:如果數據量很大的報表,如:幾十萬條記錄,可以使用緩存至磁盤,設置恰當的行數,避免全存在內存中,致使服務器OutOfMemory內存溢出。

如行式引擎報表,能夠將使用率高的前N頁數據緩存在內存,剩餘記錄緩存在磁盤中。

注:既然二者都有優缺點,所以須要合理分配內存和磁盤,把那些使用頻率最高的數據儘可能放在內存中,從而提升在內存中的命中率。

3. 數據集共享

設置了數據集緩存後,只對當前數據集再查詢時才能讀取緩存中的數據,若多個模板包含有相同的數據集(定義的SQL查詢語句相同,傳入的參數值相同,纔算相同的數據集),即可以啓用數據集共享,使得他們共享同一個緩存結果,從而節省數據庫資源,而且提升取數和報表的展示速度。

3.1 設置方法

在定義數據鏈接的地方勾選是否共享數據集,以下圖所示:

 

注:數據集緩存是對當前數據集有效,而共享數據集是對不一樣模板的相同數據集有效,而且須要將須要共享的數據集都勾選上。

3.2 數據集共享屬性設置

咱們能夠對緩存下的結果進行一些設置。

進入FR平臺中,選擇管理系統>系統管理>緩存,能夠看到數據集共享屬性以下圖所示:

 

最大活動對象:指在緩存容器中最大放置的緩存對象個數,若是活動對象數超過此數目,則服務器會根據下面的緩存策略來選擇哪些對象留下,哪些被去除

最大生存時間:指的是緩存對象在容器中存活的最大時間,不管是否活動,一旦超過此時間,此緩存對象就失效,將會被移除

最大空閒時間:指的是緩存對象在容器中停留不被使用不能超過的時間,也就是空閒的時間,若是空閒的時間超過這個時間,此對象就會被移除。

注:管理系統>系統管理>緩存,下方的模板緩存屬性設置,是對模板計算的結果進行緩存設置,而上面所說的在數據集處的緩存設置則是對數據進行緩存設置,一個是對結果來講,一個是對於數據來講,要區別開來,這是兩個不一樣的概念。

相關文章
相關標籤/搜索