[ 
https://issues.apache.org/jira/browse/RAVE-838?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13489313#comment-13489313
 ] 

Chris Geer commented on RAVE-838:
---------------------------------

Using JProfiler, I was able to profile the JPA calls directly for the first 
time which is helping shed some light on what's going on. Currently, on 0.17, 
when loading the default canonical home page, WdigetRepository.get is called 5 
times, UserRepository.get is called 5 times, PersonRepository.get is called 3 
times and four other JPA queries are run. Compare that with 0.16 where you just 
have the four JPA queries, no direct calls to any repository.get method.

After digging into it a little more I came to the conclusion that it's not the 
number of calls that is the sole problem, it's the sheer amount of data loaded 
on each call. For example, on each widget call there has to be queries to load 
Widgets, WidgetComments, WidgetRatings, WidgetTags and Categories (missed that 
split). The frustrating thing is that none of those extra sets of data is 
actually used in any of the calls to load the page (that I saw), so we are 
loading lots of data (5 times) that is never used on that page. Now, for a lot 
of them, there isn't data by default but there is still an attempt to load 
data. There is the same problem when you look at person and user. As it turns 
out, JPA has a solution to handle scenarios like this, Lazy fetch, which will 
only load the sub-data on demand which would be great. When I changed the 
Widget object to lazy fetch all the sub data the time spent in those calls 
dropped by ~70%. The major problem this introduced however was that the lazy 
data was never loaded. I couldn't find a way to fix that but maybe someone else 
with more JPA experience could have a look or explain why that's a really bad 
idea. 
                
> Performance problems after model-split merge
> --------------------------------------------
>
>                 Key: RAVE-838
>                 URL: https://issues.apache.org/jira/browse/RAVE-838
>             Project: Rave
>          Issue Type: Bug
>    Affects Versions: 0.17
>            Reporter: Chris Geer
>            Assignee: Chris Geer
>             Fix For: 0.18
>
>
>  - WidgetServer/Repository.get is being called much more frequently with the 
> RegionWidget/Widget split.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to