Hi JBoss friends, I tend to agree with Bill and Dain's last posting here. There are certain things that CMP is not designed to do *well* and large, heavy reads is one of them.
I'd venture to guess the same performance problem will occur on other app servers, in which case, it is not a war of servers, but a principle of application design (SSB+JDBC vs. CMP). If the numbers come in much better from testing on other app servers, we need to get JBoss "fixed". Until then, I'd recommend a different approach than CMP. Jason -----Original Message----- From: [EMAIL PROTECTED] [mailto:jboss-user-admin@;lists.sourceforge.net]On Behalf Of Bill Burke Sent: Tuesday, October 29, 2002 10:28 AM To: [EMAIL PROTECTED] Subject: RE: [JBoss-user] Entity Bean Performance Tuning Help JBoss is being used in production everywhere. I've been at 6 sites myself over the past year. IMHO and experience, entity beans are not the right choice if you're doing complex reporting. A handmade query cache with direct JDBC will always be faster. Besides, EJB QL doesn't have Group By. My bet is that it is a problem with your code More comments inlined. > I have a method, which does this: > > 1) begin manual transaction with jta > > 2) calls findBySomeCriteria() which returns some 750 ejbs > ->takes 200-300ms (good) > Entities not loaded yet... > 3) then iterate through each, calling one of the methods > i do this to fill the readahead cache for all the beans in an > attempt to isolate the performance problem > ->takes 80-100ms (good) > Entites are loaded by this time. This leads me to believe it is your DataObject creation that is slow. More comments follow... > 4) then iterate through each, and constructing a dataobject that I > use for display purposes > ->takes 2000-2500ms (this seams way too long) > > 5) commit the transaction, blablabla.. > > I used 2 other non-ejb solutions to get what I needed done. > > Cache the dataobjects in the webtier. It will only work in certain cases, > 2/3 in my case. I know it's duplicating work that the ejb > container should > do, Why should the EJB tier be responsible for caching your DataObjects? Unless you explicitly code this in ejbLoad, only persistent fields are stored. > but if there is noting that can be done to JBoss to get performance > acceptable then... > Try another app server then. I'd be curious to see if it is much faster. Bill > Paginate the results. Checkout this taglib, it does it all for you > automatically: http://edhill.its.uiowa.edu/display/. Plus my users like it > better because IE can render the pages very fast, compared to the > super long > time it takes with large tables. > > .peter > > -----Original Message----- > From: Georg Schmid [mailto:georg-schmid@;ti.com] > Sent: Tuesday, October 29, 2002 2:23 AM > To: [EMAIL PROTECTED] > Subject: RE: [JBoss-user] Entity Bean Performance Tuning Help > > > > First of all: > > This was only an experiment to check the impact of the > EntitySynchronizationInterceptor on performance. > Of course this is nothing you should do in a real setup. I know what the > EntitySynchronizationInterceptor is for. > > I have been using JBoss for almost a year, reading almost all posts on > the Jboss dev, user and cvs mailing lists, as well as searching the > forums regulary, if I have an issue to solve. > > My problem is: Creating value objects through calling a method on an > CMP2.0 entity bean takes 3 to 10 times more time than walking through an > equivalent result set of a 'raw' JDBC query. I tried to dig into this > issue by stripping down the interceptor stack !as an experiment! to the > bare minimum. The result of this experiment was, that the > EntitySynchronizationInterceptor is the only interceptor, that changes > performance significantly in my setup. Removing the transaction or > security interceptors did not have any significant impact. > > Getting the data from the database into the Jboss server memory is not > the problem. The finder I am using for testing returns a result set with > 1000 rows. It uses the default load group. This means that all data is > in memory after the finder has completed, which takes only a few hundred > milliseconds, just like issuing a "select * from BeanTable". For this > reason playing around with page sizes and load groups etc. is pointless. > My experience is that locking has no measurable effect on the > performance (the performance test is strictly single-user). > > The time is lost when I walk through the collection of entity beans > returned by the finder and call a method on each to create the value > objects (one method call per value object). Others have come to the same > conclusion, but I have not found a post that points to a solution of > this problem. > > I really would like to be able to do a web page, that displays at most > about 4000 rows, using entity beans and CMP2.0. But with the current > performance I have to switch to direct JDBC calls in my stateless > session beans every time I have to display more than 500 rows (Jboss > 3.0.3 running on a dual UltraSparcIII with 4GB memory and an Oracle db > on similar hardware). > > This is the issue I am trying to solve. If you could help me with that > I'd really appreciate it. > Thanks. > > Regards > Georg > > > > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:jboss-user-admin@;lists.sourceforge.net] On Behalf Of Bill Burke > Sent: Tuesday, October 29, 2002 07:24 > To: [EMAIL PROTECTED] > Subject: RE: [JBoss-user] Entity Bean Performance Tuning Help > > > Georg stop spewing nonsense....Never ever take out the synchronization > interceptor! It registers synchronzations with the TM so that the > entity bean changes get committed! Please read the for-pay docs or > review the archives. I have explained this shit over and over. > > I've added a EntityLockMonitor MBean to 3.0.4 and higher. Look in > jboss-service.xml to uncomment it. Gives you # contentions in table > with bean beans. Also gives averages and other stats. I'll be adding > this to docs eventually. > > Bill > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:jboss-user-admin@;lists.sourceforge.net]On Behalf Of Georg > > Schmid > > Sent: Monday, October 21, 2002 4:32 AM > > To: [EMAIL PROTECTED] > > Subject: RE: [JBoss-user] Entity Bean Performance Tuning Help > > > > > > Peter, > > > > I have a similar problem and tried to dig into it. > > You may have a look at the thread > > http://www.jboss.org/forums/thread.jsp?forum=46&thread=20827 in the > > forums. > > > > To summarize: the EB caching works perfectly (I guess it is as fast as > > > you can get with JDBC), but getting the rows in memory into a data or > > value object is slow. Creating n value objects for n EB instances > > involves going through the interceptor stack n times, and this is, > > where the time is lost. > > > > I incrementally stripped down the interceptor stack using a custom > > configuration in my jboss.xml, but without much success. > > > > The only way to really speed up things that I found was removing the > > synchronization interceptor, which improves performance by a factor of > > > 2, if no or only one attribute is read, but makes it worse, if many > > attributes have to be read. > > > > BTW: I used commit option B, read-ahead on-load, and the Instance Per > > Transaction setup in my experiments. > > > > The pattern you found is interesting. Because there are so many things > > > impacting the performance, it is hard to tell, whom to ask (Dain, > > Bill, David,...). > > > > Bill Burke did some performance tests using ECPerf. Maybe he can > > report a bit on the results. > > > > Regards > > Georg > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:jboss-user-admin@;lists.sourceforge.net] On Behalf Of Luttrell, > > > Peter > > Sent: Saturday, October 19, 2002 02:17 > > To: '[EMAIL PROTECTED]' > > Subject: [JBoss-user] Entity Bean Performance Tuning Help > > > > > > I have something that is taking longer then I would like and am trying > > > to tune jboss to reduce the time it takes. > > > > My test scenario is as such: > > > > JBoss3.0.3 on jdk1.4.1_01 > > 1 2.0 CMP Enity bean with about 10 fields and 3 relationships. I'm > > using commit-option A so all beans should be cached (see cache policy > > below) once loaded. The first time that I run this it obviously takes > > longer (filling the cache), however subsequent times aren't as fast as > > > i would like; see > > below: > > > > I have a method, which does this: > > > > 1) begin manual transaction with jta > > > > 2) calls findBySomeCriteria() which returns some 750 ejbs > > ->takes 200-300ms (good) > > > > 3) then iterate through each, calling one of the methods > > i do this to fill the readahead cache for all the beans in an > > attempt to isolate the performance problem > > ->takes 80-100ms (good) > > > > 4) then iterate through each, and constructing a dataobject that I > > > use for display purposes > > ->takes 2000-2500ms (this seams way too long) > > > > 5) commit the transaction, blablabla.. > > > > The problem is step 4 seams to be taking longer then it should. > > > > I then added some trace to the dataobject constructor method, where I > > basically pass in a reference to the ejb and call most of the methods > > on it. The trace dumps out the total time the constructor took. I > > noticed a weird pattern. Most of the constructions took 0ms, but every > > > 5th or so it took 15-16ms, which is where all of my time is going. > > Note that it is not exactly every 5th and tends to vary a bit. Here's > > a sample of the > > output: > > > > 18:46:06,840 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,840 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,840 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,840 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,855 INFO [STDOUT] displayBean construction took 15 ms > > 18:46:06,855 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,855 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,855 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,855 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,871 INFO [STDOUT] displayBean construction took 16 ms > > 18:46:06,871 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,871 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,871 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,871 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,886 INFO [STDOUT] displayBean construction took 15 ms > > 18:46:06,886 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,886 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,886 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,886 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,902 INFO [STDOUT] displayBean construction took 16 ms > > 18:46:06,902 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,902 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,902 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,902 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,918 INFO [STDOUT] displayBean construction took 16 ms > > 18:46:06,918 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,918 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,918 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,918 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,933 INFO [STDOUT] displayBean construction took 15 ms > > 18:46:06,933 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,933 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,933 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,949 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,949 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,965 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,965 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,965 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,965 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,965 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,980 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,980 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,980 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,980 INFO [STDOUT] displayBean construction took 0 ms > > 18:46:06,996 INFO [STDOUT] displayBean construction took 16 ms > > > > my ejb-jar.xml file: > > > > I have not declared any security-constraints for the bean. > > I have tried it with transactions on and off (Required/Supports), > > which effected performance a little but did not correct the delays i'm > > > seeing. > > > > my jboss.xml > > > > I have the bean tied to a custom container config. Here's the custom > > config, which i basically copied directly from the standardjboss.xml > > file. Note the changes to the cache capacity and age, etc. This is > > intended to keep the beans in the cache. > > > > <container-configurations> > > <container-configuration> > > <container-name>LongLasting Large CMP 2.x EntityBean > > Cache</container-name> > > <call-logging>false</call-logging> > > > > > <container-invoker>org.jboss.proxy.ejb.ProxyFactory</container-invoker> > > <container-interceptors> > > <interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor> > > > <interceptor>org.jboss.ejb.plugins.SecurityInterceptor</interceptor> > > <interceptor>org.jboss.ejb.plugins.TxInterceptorCMT</interceptor> > > <interceptor metricsEnabled = > > "true">org.jboss.ejb.plugins.MetricsInterceptor</interceptor> > > > > <interceptor>org.jboss.ejb.plugins.EntityCreationInterceptor</intercep > > to > > r> > > > > <interceptor>org.jboss.ejb.plugins.EntityLockInterceptor</interceptor> > > > > <interceptor>org.jboss.ejb.plugins.EntityInstanceInterceptor</intercep > > to > > r> > > > > <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInte > > rc > > eptor</interceptor> > > > > <interceptor>org.jboss.ejb.plugins.EntitySynchronizationInterceptor</i > > nt > > erceptor> > > > > <interceptor>org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor</i > > nt > > erceptor> > > </container-interceptors> > > <client-interceptors> > > <home> > > <interceptor>org.jboss.proxy.ejb.HomeInterceptor</interceptor> > > <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor> > > <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor> > > > <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> > > </home> > > <bean> > > <interceptor>org.jboss.proxy.ejb.EntityInterceptor</interce ptor> > > <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor> > > <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor> > > > <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> > > </bean> > > <list-entity> > > > > <interceptor>org.jboss.proxy.ejb.ListEntityInterceptor</interceptor> > > <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor> > > <interceptor>org.jboss.proxy.TransactionInterceptor</interceptor> > > > <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor> > > </list-entity> > > </client-interceptors> > > &nb > > sp;<instance-pool>org.jboss.ejb.plugins.EntityInstancePool</instance-p > > oo > > l> > > > > <instance-cache>org.jboss.ejb.plugins.EntityInstanceCache</instance-ca > > ch > > e> > > > > <persistence-manager>org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager</ > > pe > > rsistence-manager> > > <transaction-manager>org.jboss.tm.TxManager</transaction-manager> > > > > <locking-policy>org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock</l > > oc > > king-policy> > > <container-cache-conf> > > > > <cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</c > > ac > > he-policy> > > <cache-policy-conf> > > <min-capacity>50</min-capacity> > > <max-capacity>10000</max-capacity> > > <overager-period>100000</over ager-period> > > <max-bean-age>31536000</max-bean-age> > > <resizer-period>100000</resizer-period> > > <max-cache-miss-period>60</max-cache-miss-period> > > <min-cache-miss-period>1</min-cache-miss-period> > > <cache-load-factor>0.75</cache-load-factor> > > </cache-policy-conf> > > </container-cache-conf> > > <container-pool-conf> > > <MaximumSize>100</MaximumSize> > > </container-pool-conf> > > <commit-option>A</commit-option> > > </container-configuration> > > </container-configurations> > > > > > > I have also tried replacing the one of the other cache policies > > (org.jboss.ejb.plugins.NoPassivationCachePolicy) and recieved no > > differnet results. > > > > Am i doing something glaringly wrong? > > Can anyone suggest what else to try to get the times down? > > > > thanks. > > .peter > > > > > > > > > > This transmission contains information solely for intended recipient > > and may be privileged, confidential and/or otherwise protect from > > disclosure. If you are not the intended recipient, please contact the > > sender and delete all copies of this transmission. This message and/or > > > the materials contained herein are not an offer to sell, or a > > solicitation of an offer to buy, any securities or other instruments. > > The information has been obtained or derived from sources believed by > > us to be reliable, but we do not represent that it is accurate or > > complete. Any opinions or estimates contained in this information > > constitute our judgment as of this date and are subject to change > > without notice. Any information you share with us will be used in the > > operation of our business, and we do not request and do not want any > > material, nonpublic information. Absent an express prior written > > agreement, we are not agreeing to treat any information confidentially > > > and will use any and all information and reserve the right to publish > > or disclose any information you share with us. > > > > > > > > ------------------------------------------------------- > > This sf.net email is sponsored by:ThinkGeek > > Welcome to geek heaven. > > http://thinkgeek.com/sf > > _______________________________________________ > > JBoss-user mailing list > > [EMAIL PROTECTED] > > https://lists.sourceforge.net/lists/listinfo/jboss-user > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-user > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-user > > > > This transmission contains information solely for intended > recipient and may > be privileged, confidential and/or otherwise protect from disclosure. If > you are not the intended recipient, please contact the sender and > delete all > copies of this transmission. This message and/or the materials contained > herein are not an offer to sell, or a solicitation of an offer to buy, any > securities or other instruments. The information has been obtained or > derived from sources believed by us to be reliable, but we do not > represent > that it is accurate or complete. Any opinions or estimates contained in > this information constitute our judgment as of this date and are > subject to > change without notice. Any information you share with us will be used in > the operation of our business, and we do not request and do not want any > material, nonpublic information. Absent an express prior written > agreement, > we are not agreeing to treat any information confidentially and > will use any > and all information and reserve the right to publish or disclose any > information you share with us. > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-user ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user