いろいろベンチ(8)
#とりあえず,これで一区切りにしよう.
Hibernateのテストをプロファイリングしてみました.使ったプロファイラはYourKit Java Profiler.
まずは,バッチタイプのプロファイリング結果.SELECT回数が102回なのは,後続のUPDATE,DELETEの元ネタを渡すために再度SELECTしているため.
Name | Time(ms) | Count |
---|---|---|
TestHibernate.selectAllCats() | 40,843 | 102 |
└net.sf.hibernate.impl.SessionImpl.find() | 40,843 | 102 |
└net.sf.hibernate.impl.SessionImpl.find() | 40,843 | 102 |
├net.sf.hibernate.impl.SessionImpl.find() | 40,828 | 102 |
|├net.sf.hibernate.hql.QueryTranslator.list() | 35,171 | 102 |
||└net.sf.hibernate.loader.Loader.list() | 35,171 | 102 |
|| └net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections() | 35,171 | 102 |
|| └net.sf.hibernate.loader.Loader.doQuery() | 35,171 | 102 |
|| ├com.p6spy.engine.logging.P6LogResultSet.next() | 20,640 | 10,302 |
|| ├net.sf.hibernate.loader.Loader.getKeyFromResultSet() | 7,312 | 10,200 |
|| ├net.sf.hibernate.loader.Loader.getRow() | 3,546 | 10,200 |
|| ├net.sf.hibernate.loader.Loader.getResultSet() | 2,562 | 102 |
|| ├net.sf.hibernate.loader.Loader.prepareQueryStatement() | 218 | 102 |
|| ├net.sf.hibernate.impl.BatcherImpl.closeQueryStatement() | 187 | 102 |
|| ├net.sf.hibernate.impl.SessionImpl.initializeEntity() | 156 | 300 |
|| ├net.sf.hibernate.hql.QueryTranslator.getResultColumnOrRow() | 78 | 10,200 |
|| ├net.sf.hibernate.impl.SessionImpl.proxyFor() | 62 | 10,200 |
|| ├net.sf.hibernate.hql.QueryTranslator.getSQLString() | 46 | 102 |
|| ├java.util.ArrayList.add() | 31 | 10,200 |
|| ├java.lang.StringBuffer.append() | 15 | 204 |
|| └java.util.ArrayList.<init>() | 15 | 204 |
|└net.sf.hibernate.impl.SessionImpl.getQueries() | 5,640 | 102 |
└java.lang.ClassLoader.loadClassInternal() | 15 | 1 |
TestHibernate.endTransaction() | 2,453 | 4 |
├net.sf.hibernate.transaction.JDBCTransaction.commit() | 2,453 | 4 |
|├net.sf.hibernate.impl.SessionImpl.flush() | 2,406 | 4 |
|├net.sf.hibernate.impl.SessionImpl.afterTransactionCompletion() | 15 | 4 |
|└com.p6spy.engine.logging.P6LogConnection.commit() | 15 | 4 |
└net.sf.hibernate.impl.SessionImpl.close() | 15 | 4 |
TestHibernate.beginTransaction() | 421 | 4 |
├net.sf.hibernate.impl.SessionFactoryImpl.openSession() | 406 | 4 |
|└net.sf.hibernate.impl.SessionFactoryImpl.openSession() | 406 | 4 |
| ├net.sf.hibernate.impl.SessionFactoryImpl.openSession() | 390 | 4 |
| └net.sf.ehcache.hibernate.Provider.nextTimestamp() | 15 | 4 |
└net.sf.hibernate.impl.SessionImpl.beginTransaction() | 15 | 4 |
TestHibernate.createCats() | 281 | 100 |
└net.sf.hibernate.impl.SessionImpl.save() | 281 | 100 |
├net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier() | 250 | 100 |
|├net.sf.hibernate.impl.SessionImpl.doSave() | 203 | 100 |
|└net.sf.hibernate.id.UUIDHexGenerator.generate() | 46 | 100 |
├net.sf.hibernate.impl.SessionImpl.getEntity() | 15 | 100 |
└net.sf.hibernate.impl.SessionImpl.unproxy() | 15 | 100 |
TestHibernate.deleteCats() | 78 | 1 |
└net.sf.hibernate.impl.SessionImpl.delete() | 62 | 100 |
└net.sf.hibernate.impl.SessionImpl.doDelete() | 62 | 100 |
├net.sf.hibernate.impl.MessageHelper.infoString() | 31 | 100 |
├java.lang.ClassLoader.loadClassInternal() | 15 | 1 |
└java.util.HashSet.add() | 15 | 100 |
TestHibernate.updateCats() | 15 | 1 |
└net.sf.hibernate.impl.SessionImpl.update() | 15 | 100 |
└org.apache.commons.logging.impl.Log4JLogger.trace() | 15 | 100 |
#UPDATEが15[msec]って,あんた...
続いて,ショートトランザクションタイプ(コネクション毎回取得)の結果.基本的にバッチと同じだったんで,一番違いがあったSELECTんとこだけ.
Name | Time(ms) | Count |
---|---|---|
TestHibernate.selectAllCats() | 75,828 | 100 |
└net.sf.hibernate.impl.SessionImpl.find() | 75,828 | 100 |
└net.sf.hibernate.impl.SessionImpl.find() | 75,828 | 100 |
├net.sf.hibernate.impl.SessionImpl.find() | 75,828 | 100 |
|├net.sf.hibernate.hql.QueryTranslator.list() | 75,281 | 100 |
||└net.sf.hibernate.loader.Loader.list() | 75,281 | 100 |
|| └net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections() | 75,281 | 100 |
|| └net.sf.hibernate.loader.Loader.doQuery() | 75,281 | 100 |
|| ├*net.sf.hibernate.loader.Loader.getRow() | 34,734 | 10,000 |
|| ├com.p6spy.engine.logging.P6LogResultSet.next() | 23,656 | 10,100 |
|| ├net.sf.hibernate.loader.Loader.getKeyFromResultSet() | 6,984 | 10,000 |
|| ├*net.sf.hibernate.impl.SessionImpl.initializeEntity() | 6,531 | 10,000 |
|| ├net.sf.hibernate.loader.Loader.getResultSet() | 2,500 | 100 |
|| ├net.sf.hibernate.loader.Loader.prepareQueryStatement() | 140 | 100 |
|| ├net.sf.hibernate.hql.QueryTranslator.getResultColumnOrRow() | 125 | 10,000 |
|| ├net.sf.hibernate.impl.BatcherImpl.closeQueryStatement() | 78 | 100 |
|| ├java.util.ArrayList.add() | 78 | 10,000 |
|| ├java.util.ArrayList.get() | 15 | 10,000 |
|| ├org.apche.commons.logging.impl.Log4JLogger.isTraceEnabled() | 15 | 300 |
|| ├net.sf.hibernate.hql.QueryTranslator.getSQLString() | 15 | 100 |
|| └java.util.ArrayList.<init>() | 15 | 200 |
|├*net.sf.hibernate.impl.SessionImpl.getQueries() | 515 | 100 |
|└java.lang.StringBuffer.toString() | 15 | 100 |
└java.lang.ClassLoader.loadClassInternal() | 15 | 1 |
Name | batch(ms/count) | short(ms/count) |
---|---|---|
net.sf.hibernate.loader.Loader.getRow() | 3,546/10,200 | 34,734/10,000 |
└net.sf.hibernate.loader.Loader.instanceNotYetLoaded() | 1,093/300 | 32,203/10,000 |
├net.sf.hibernate.loader.Loader.loadFromResultSet() | 1,015/300 | 30,703/10,000 |
|├net.sf.hibernate.loader.Loader.hydrate() | 828/300 | 25,375/10,000 |
|├net.sf.hibernate.impl.SessionImpl.postHydrate() | 62/300 | 1,031/10,000 |
|├net.sf.hibernate.impl.SessionImpl.addUninitializedEntity() | 46/300 | 1,578/10,000 |
|├net.sf.hibernate.impl.SessionImpl.getPersister() | 15/300 | 140/10,000 |
|├org.apache.commons.logging.impl.Log4JLogger.trace() | 15/300 | 625/10,000 |
|└java.lang.StringBuffer.append() | 15/300 | 531/10,000 |
└net.sf.hibernate.impl.SessionImpl.instantiate() | 46/300 | 1,046/10,000 |
Name | Time(ms) | Count |
---|---|---|
TestHibernate.selectAllCats() | 47,781 | 102 |
├net.sf.hibernate.impl.IteratorImpl.next() | 40,000 | 10,200 |
|├net.sf.hibernate.impl.IteratorImpl.postNext() | 39,343 | 10,200 |
||├net.sf.hibernate.type.EntityType.nullSafeGet() | 24,703 | 10,098 |
|||├net.sf.hibernate.type.EntityType.resolveIdentifier() | 16,750 | 10,098 |
||||└net.sf.hibernate.type.ManyToOneType.resolveIdentifier() | 16,687 | 10,098 |
|||| └net.sf.hibernate.impl.SessionImpl.internalLoad() | 16,671 | 10,098 |
|||| ├net.sf.hibernate.impl.SessionImpl.doLoadByClass() | 16,500 | 10,098 |
|||| └net.sf.hibernate.UnresolvableObjectException.throwIfNull() | 46 | 10,098 |
|||└net.sf.hibernate.type.ManyToOneType.hydrate() | 7,890 | 10,098 |
||├com.p6spy.engine.logging.P6LogResultSet.next() | 13,859 | 10,200 |
||├org.apache.commons.logging.impl.Log4JLogger.debug() | 468 | 10,200 |
||└net.sf.hibernate.impl.IteratorImpl.close() | 109 | 102 |
|└org.apache.commons.logging.impl.Log4JLogger.debug() | 625 | 10,200 |
├net.sf.hibernate.impl.QueryImpl.iterate() | 7,593 | 102 |
├net.sf.hibernate.impl.SessionImpl.createQuery() | 78 | 102 |
└java.util.ArrayList.add() | 46 | 10,200 |