Jump to content

BIRT Developer Center Download


Photo
- - - - -

Possible ways to increase report generation performance


  • Please log in to reply
6 replies to this topic

#1 getza1

getza1

    Member

  • Members
  • PipPip
  • 25 posts

Posted 02 April 2012 - 09:23 AM

We have a report that is taking a really long time to generate when we start getting above 100,000 records. When profiling the report generation I noticed that it caches the result set to disk and then does sequential reads on the file. I tried setting the DataEngine.MEMORY_BUFFER_SIZE to 900MB so it would hold the whole result set in memory and not cache to disk. Yet I still see the file being created and calls to ResultObjectUtil.readData(). For one particular report it made around 900 calls to that method. Is there a way to speed up the generation of reports? We have creating PDF reports. I have searched Google and the forum and haven't really found any information regarding this. Just posts on how to get BIRT to use less memory. I have attached a graph which shows how the increase in records is impacting the increase in report generation time. Let me know if there is anything else that I can provide to get better feedback such as the report design, etc. Thanks, Aaron
  • Suraj Patil likes this

#2 getza1

getza1

    Member

  • Members
  • PipPip
  • 25 posts

Posted 02 April 2012 - 09:31 AM

Forgot to attach the graph.

#3 getza1

getza1

    Member

  • Members
  • PipPip
  • 25 posts

Posted 02 April 2012 - 09:31 AM

Forgot to attach the graph.

Attached Files



#4 johnw

johnw

    Senior Member

  • Members
  • 772 posts

Posted 02 April 2012 - 10:49 AM

What is in the report? Can you post the RPTDocument (with a small recordset) so we can take a look. A lot of different factors come into play for report performance, such as number of elements, properties set on those elements, etc.

John Ward

BIRT Expert

 

Help us improve the BIRT Product and Community by taking this survey.


#5 getza1

getza1

    Member

  • Members
  • PipPip
  • 25 posts

Posted 02 April 2012 - 11:15 AM

I can post the report design but I most likely will not be able to post a small data set. If this is an issue I might be able to mock up some data.

Attached Files



#6 CBR

CBR

    Member

  • Members
  • 571 posts

Posted 06 April 2012 - 07:47 AM

The report seems to be quite complex to me because it has a lot of nested groups on the outer list. Would it be possible to already group the data accordingly using SQL, so that you can remove the groups from the list and use detail rows instead? Another thing that would increase performance is the cube. There is a checkbox to tell the cube that the data is already aggregated before it hits the cube: I would suggest to always use SQL to group the data instead of bringing the cube into play (it doesn't matter much if the dataset only contains about one hundred rows but if its a few hundred it definitly makes a difference). In BIRT 3.7 you can deactivate the dataset cache (i think that this option was already existing in BIRT 2.6.x but didn't worked). What's the Xmx setting on your dev machine? (you have to keep in mind that the postgres jdbc driver already loads the whole resultset into memory before even returning the first result row, because the set up looks like you are not streaming the rows)

#7 getza1

getza1

    Member

  • Members
  • PipPip
  • 25 posts

Posted 13 April 2012 - 02:25 PM

Thanks for the tips. We are starting to try and push the grouping into the database layer. The Xmx on my machine is set at 2GB. We ended up generating a report for each grade instead of having all the grades in one report. This increased the performance because it is now working on a smaller dataset. Although when we aggregate it is taking about twice as long to generate the report. Using your suggestions of doing the grouping at the database level should help this.