📄 statisticsimpl.java
字号:
//$Id: StatisticsImpl.java 11398 2007-04-10 14:54:07Z steve.ebersole@jboss.com $package org.hibernate.stat;import java.util.HashMap;import java.util.Map;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.hibernate.cache.Cache;import org.hibernate.cache.Region;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.util.ArrayHelper;/** * @see org.hibernate.stat.Statistics * * @author Gavin King */public class StatisticsImpl implements Statistics, StatisticsImplementor { //TODO: we should provide some way to get keys of collection of statistics to make it easier to retrieve from a GUI perspective private static final Logger log = LoggerFactory.getLogger(StatisticsImpl.class); private SessionFactoryImplementor sessionFactory; private boolean isStatisticsEnabled; private long startTime; private long sessionOpenCount; private long sessionCloseCount; private long flushCount; private long connectCount; private long prepareStatementCount; private long closeStatementCount; private long entityLoadCount; private long entityUpdateCount; private long entityInsertCount; private long entityDeleteCount; private long entityFetchCount; private long collectionLoadCount; private long collectionUpdateCount; private long collectionRemoveCount; private long collectionRecreateCount; private long collectionFetchCount; private long secondLevelCacheHitCount; private long secondLevelCacheMissCount; private long secondLevelCachePutCount; private long queryExecutionCount; private long queryExecutionMaxTime; private String queryExecutionMaxTimeQueryString; private long queryCacheHitCount; private long queryCacheMissCount; private long queryCachePutCount; private long commitedTransactionCount; private long transactionCount; private long optimisticFailureCount; /** second level cache statistics per region */ private final Map secondLevelCacheStatistics = new HashMap(); /** entity statistics per name */ private final Map entityStatistics = new HashMap(); /** collection statistics per name */ private final Map collectionStatistics = new HashMap(); /** entity statistics per query string (HQL or SQL) */ private final Map queryStatistics = new HashMap(); public StatisticsImpl() { clear(); } public StatisticsImpl(SessionFactoryImplementor sessionFactory) { clear(); this.sessionFactory = sessionFactory; } /** * reset all statistics */ public synchronized void clear() { secondLevelCacheHitCount = 0; secondLevelCacheMissCount = 0; secondLevelCachePutCount = 0; sessionCloseCount = 0; sessionOpenCount = 0; flushCount = 0; connectCount = 0; prepareStatementCount = 0; closeStatementCount = 0; entityDeleteCount = 0; entityInsertCount = 0; entityUpdateCount = 0; entityLoadCount = 0; entityFetchCount = 0; collectionRemoveCount = 0; collectionUpdateCount = 0; collectionRecreateCount = 0; collectionLoadCount = 0; collectionFetchCount = 0; queryExecutionCount = 0; queryCacheHitCount = 0; queryExecutionMaxTime = 0; queryExecutionMaxTimeQueryString = null; queryCacheMissCount = 0; queryCachePutCount = 0; transactionCount = 0; commitedTransactionCount = 0; optimisticFailureCount = 0; secondLevelCacheStatistics.clear(); entityStatistics.clear(); collectionStatistics.clear(); queryStatistics.clear(); startTime = System.currentTimeMillis(); } public synchronized void openSession() { sessionOpenCount++; } public synchronized void closeSession() { sessionCloseCount++; } public synchronized void flush() { flushCount++; } public synchronized void connect() { connectCount++; } public synchronized void loadEntity(String entityName) { entityLoadCount++; getEntityStatistics(entityName).loadCount++; } public synchronized void fetchEntity(String entityName) { entityFetchCount++; getEntityStatistics(entityName).fetchCount++; } /** * find entity statistics per name * * @param entityName entity name * @return EntityStatistics object */ public synchronized EntityStatistics getEntityStatistics(String entityName) { EntityStatistics es = (EntityStatistics) entityStatistics.get(entityName); if (es==null) { es = new EntityStatistics(entityName); entityStatistics.put(entityName, es); } return es; } public synchronized void updateEntity(String entityName) { entityUpdateCount++; EntityStatistics es = getEntityStatistics(entityName); es.updateCount++; } public synchronized void insertEntity(String entityName) { entityInsertCount++; EntityStatistics es = getEntityStatistics(entityName); es.insertCount++; } public synchronized void deleteEntity(String entityName) { entityDeleteCount++; EntityStatistics es = getEntityStatistics(entityName); es.deleteCount++; } /** * Get collection statistics per role * * @param role collection role * @return CollectionStatistics */ public synchronized CollectionStatistics getCollectionStatistics(String role) { CollectionStatistics cs = (CollectionStatistics) collectionStatistics.get(role); if (cs==null) { cs = new CollectionStatistics(role); collectionStatistics.put(role, cs); } return cs; } public synchronized void loadCollection(String role) { collectionLoadCount++; getCollectionStatistics(role).loadCount++; } public synchronized void fetchCollection(String role) { collectionFetchCount++; getCollectionStatistics(role).fetchCount++; } public synchronized void updateCollection(String role) { collectionUpdateCount++; getCollectionStatistics(role).updateCount++; } public synchronized void recreateCollection(String role) { collectionRecreateCount++; getCollectionStatistics(role).recreateCount++; } public synchronized void removeCollection(String role) { collectionRemoveCount++; getCollectionStatistics(role).removeCount++; } /** * Second level cache statistics per region * * @param regionName region name * @return SecondLevelCacheStatistics */ public synchronized SecondLevelCacheStatistics getSecondLevelCacheStatistics(String regionName) { SecondLevelCacheStatistics slcs = ( SecondLevelCacheStatistics ) secondLevelCacheStatistics.get( regionName ); if ( slcs == null ) { if ( sessionFactory == null ) { return null; } Region region = sessionFactory.getSecondLevelCacheRegion( regionName ); if ( region == null ) { return null; } slcs = new SecondLevelCacheStatistics( region ); secondLevelCacheStatistics.put( regionName, slcs ); } return slcs; } public synchronized void secondLevelCachePut(String regionName) { secondLevelCachePutCount++; getSecondLevelCacheStatistics(regionName).putCount++; } public synchronized void secondLevelCacheHit(String regionName) { secondLevelCacheHitCount++; getSecondLevelCacheStatistics(regionName).hitCount++; } public synchronized void secondLevelCacheMiss(String regionName) { secondLevelCacheMissCount++; getSecondLevelCacheStatistics(regionName).missCount++; } public synchronized void queryExecuted(String hql, int rows, long time) { queryExecutionCount++; if (queryExecutionMaxTime<time) { queryExecutionMaxTime=time; queryExecutionMaxTimeQueryString = hql; } if (hql!=null) { QueryStatistics qs = getQueryStatistics(hql); qs.executed(rows, time); } } public synchronized void queryCacheHit(String hql, String regionName) { queryCacheHitCount++; if (hql!=null) { QueryStatistics qs = getQueryStatistics(hql); qs.cacheHitCount++; } SecondLevelCacheStatistics slcs = getSecondLevelCacheStatistics(regionName); slcs.hitCount++; } public synchronized void queryCacheMiss(String hql, String regionName) { queryCacheMissCount++; if (hql!=null) { QueryStatistics qs = getQueryStatistics(hql); qs.cacheMissCount++; } SecondLevelCacheStatistics slcs = getSecondLevelCacheStatistics(regionName); slcs.missCount++; } public synchronized void queryCachePut(String hql, String regionName) { queryCachePutCount++; if (hql!=null) { QueryStatistics qs = getQueryStatistics(hql); qs.cachePutCount++; } SecondLevelCacheStatistics slcs = getSecondLevelCacheStatistics(regionName); slcs.putCount++; } /** * Query statistics from query string (HQL or SQL) * * @param queryString query string * @return QueryStatistics */ public synchronized QueryStatistics getQueryStatistics(String queryString) { QueryStatistics qs = (QueryStatistics) queryStatistics.get(queryString); if (qs==null) { qs = new QueryStatistics(queryString); queryStatistics.put(queryString, qs); } return qs; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -