標籤:
1. 問題描述
對於大資料量報表,若每次直接從資料庫中查詢資料,不僅增加資料庫伺服器的壓力,也極大的影響了取數的速度從而降低了報表的執行速度,為此FineReport提供了資料集緩衝與共用功能。
FineReport可先將其資料集查詢的結果緩衝下來,對於緩衝下來的資料,再次使用到相同資料集時,無需再次串連資料庫重新查詢資料,直接使用緩衝下來的結果,即使用FineReport的資料集共用機制,達到資源複用,減少取數時間從而提高了報表的展現速度。
2. 資料集緩衝
緩衝分為緩衝至記憶體和緩衝至磁碟。
2.1 緩衝至記憶體
設定方法:預設的就是使用記憶體緩衝即所有資料都儲存在記憶體中,在資料庫查詢時段可以看到,如:
設定後的效果:當執行資料集時就會在將此記過緩衝至記憶體中,下次在執行此資料集時,會直接從記憶體緩衝中取數。
優缺點:空間資源有限,但效率很高,取數速度快。
什麼情況使用:一般使用率高,且資料量不算太大的報表,可直接使用記憶體緩衝。
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平台中,選擇管理系統>系統管理>緩衝,可以看到資料集共用屬性如所示:
最大使用中的物件:指在緩衝容器中最大放置的緩衝對象個數,如果使用中的物件數超過此數目,則伺服器會根據下面的緩衝策略來選擇哪些對象留下,哪些被去除
最大存留時間:指的是緩衝對象在容器中存活的最大時間,無論是否活動,一旦超過此時間,此緩衝對象就失效,將會被移除
最大空閑時間:指的是緩衝對象在容器中停留不被使用不能超過的時間,也就是閒置時間,如果閒置時間超過這個時間,此對象就會被移除。
註:管理系統>系統管理>緩衝,下方的模板緩衝屬性設定,是對模板計算的結果進行緩衝設定,而上面所說的在資料集處的緩衝設定則是對資料進行緩衝設定,一個是對結果來說,一個是對於資料來說,要區別開來,這是兩個不同的概念。
報表效能最佳化方案之資料集緩衝與共用