org.hibernate.stat.Statistics Maven / Gradle / Ivy
Show all versions of beangle-hibernate-core Show documentation
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.stat;
import java.time.Instant;
import java.util.Map;
import org.checkerframework.checker.nullness.qual.Nullable;
/**
* Exposes statistics collected from all sessions belonging to a
* particular {@link org.hibernate.SessionFactory}.
*
* Collection of statistics is enabled if the configuration property
* {@value org.hibernate.cfg.AvailableSettings#GENERATE_STATISTICS} is
* set to {@code true}. It may be dynamically enabled or disabled at
* runtime by calling {@link #setStatisticsEnabled(boolean)}.
*
* @author Emmanuel Bernard
*/
public interface Statistics {
/**
* The default value of the configuration property
* {@value org.hibernate.cfg.AvailableSettings#QUERY_STATISTICS_MAX_SIZE}.
*/
int DEFAULT_QUERY_STATISTICS_MAX_SIZE = 5000;
/**
* Is collection of statistics enabled?
*/
boolean isStatisticsEnabled();
/**
* Enable or disable statistics collection.
*/
void setStatisticsEnabled(boolean enabled);
/**
* Reset all statistics.
*/
void clear();
/**
* Log the main statistics at level {@code INFO}.
*/
void logSummary();
/**
* Obtain the statistics for the entity with the given name.
*
* @param entityName the entity name
*/
EntityStatistics getEntityStatistics(String entityName);
/**
* Obtain the statistics for the collection with the given role.
*
* @param role the collection role
*/
CollectionStatistics getCollectionStatistics(String role);
/**
* Obtain the natural id resolution statistics for the entity
* type with the given name.
*
* @param entityName The entity name that is the root of the
* hierarchy containing the natural id
*/
NaturalIdStatistics getNaturalIdStatistics(String entityName);
/**
* Obtain the query statistics for the given query string.
*
* @param queryString the query string, written in HQL or SQL
*/
QueryStatistics getQueryStatistics(String queryString);
/**
* Obtain the second-level cache statistics for the given cache
* region.
*
* @param regionName The unqualified region name
*
* @return the statistics for the named region, or {@code null}
* if the second-level cache is not enabled
*
* @throws IllegalArgumentException if there is no region with the given name
*/
CacheRegionStatistics getDomainDataRegionStatistics(String regionName);
/**
* Obtain the second-level cache statistics for the given query
* cache region.
*
* @param regionName The unqualified region name
*
* @return the statistics for the named region, or {@code null}
* if either query result caching is not enabled, or no
* query cache region exists with the given name
*/
@Nullable CacheRegionStatistics getQueryRegionStatistics(String regionName);
/**
* Obtain the statistics for either a domain data or query result
* cache region.
*
* This method checks both, preferring the domain data region if
* there is one. Think of it as a cascading check to:
* - {@link #getDomainDataRegionStatistics}
* - {@link #getQueryRegionStatistics}
*
* Note that null is returned instead of throwing an exception when
* no region exists with the given name.
*
* @param regionName The unqualified region name
*
* @return the statistics for the named region, or {@code null} if
* there is no region with the given name
*/
@Nullable CacheRegionStatistics getCacheRegionStatistics(String regionName);
/**
* The global number of entity deletes.
*/
long getEntityDeleteCount();
/**
* The global number of entity inserts.
*/
long getEntityInsertCount();
/**
* The global number of entity loads.
*/
long getEntityLoadCount();
/**
* The global number of entity fetches.
*/
long getEntityFetchCount();
/**
* The global number of entity updates.
*/
long getEntityUpdateCount();
/**
* The global number of executed queries.
*/
long getQueryExecutionCount();
/**
* The time in milliseconds of the slowest query.
*/
long getQueryExecutionMaxTime();
/**
* The query string for the slowest query.
*/
@Nullable String getQueryExecutionMaxTimeQueryString();
/**
* The global number of cached queries successfully retrieved from
* the cache.
*/
long getQueryCacheHitCount();
/**
* The global number of cached queries notnot found in the
* cache.
*/
long getQueryCacheMissCount();
/**
* The global number of cacheable queries put in cache.
*/
long getQueryCachePutCount();
/**
* The global number of natural id queries executed against the
* database.
*/
long getNaturalIdQueryExecutionCount();
/**
* The global maximum query time for natural id queries executed
* against the database.
*/
long getNaturalIdQueryExecutionMaxTime();
/**
* The region for the maximum natural id query time.
*/
@Nullable String getNaturalIdQueryExecutionMaxTimeRegion();
/**
* The entity name for the maximum natural id query time.
*/
@Nullable String getNaturalIdQueryExecutionMaxTimeEntity();
/**
* The global number of cached natural id lookups successfully
* retrieved from the cache.
*/
long getNaturalIdCacheHitCount();
/**
* The global number of cached natural id lookups not found
* in the cache.
*/
long getNaturalIdCacheMissCount();
/**
* The global number of cacheable natural id lookups put in cache.
*/
long getNaturalIdCachePutCount();
/**
* The global number of timestamps successfully retrieved from cache.
*/
long getUpdateTimestampsCacheHitCount();
/**
* The global number of timestamp requests that were not found in the
* cache.
*/
long getUpdateTimestampsCacheMissCount();
/**
* The global number of timestamps put in cache.
*/
long getUpdateTimestampsCachePutCount();
/**
* The global number of flush operations executed, including automatic
* (either manual or automatic).
*/
long getFlushCount();
/**
* The global number of connections requested by sessions.
*
* The actual number of connections used may be much smaller, assuming
* that a connection pool is in use.
*/
long getConnectCount();
/**
* The global number of cacheable entities and collections successfully
* retrieved from the cache.
*/
long getSecondLevelCacheHitCount();
/**
* The global number of cacheable entities collections not found in the
* cache and loaded from the database.
*/
long getSecondLevelCacheMissCount();
/**
* The global number of cacheable entities and collections put in the
* cache.
*/
long getSecondLevelCachePutCount();
/**
* The global number of sessions closed.
*/
long getSessionCloseCount();
/**
* The global number of sessions opened.
*/
long getSessionOpenCount();
/**
* The global number of collections loaded.
*/
long getCollectionLoadCount();
/**
* The global number of collections fetched.
*/
long getCollectionFetchCount();
/**
* The global number of collections updated.
*/
long getCollectionUpdateCount();
/**
* The global number of collections removed.
*/
//even on inverse="true"
long getCollectionRemoveCount();
/**
* The global number of collections recreated
*/
long getCollectionRecreateCount();
/**
* The {@link Instant} at which this instance of {@code Statistics}
* was created, or since the last time {@link #clear()} was called.
*/
Instant getStart();
/**
* The {@linkplain Instant#toEpochMilli()} milliseconds since the
* initial creation of this instance, or since the last time
* {@link #clear()} was called.
*
* @deprecated use {@link #getStart()}
*/
@Deprecated(since = "6.0")
long getStartTime();
/**
* All executed query strings.
*
* The maximum number of queries tracked by the Hibernate statistics
* is determined by the configuration property
* {@value org.hibernate.cfg.AvailableSettings#QUERY_STATISTICS_MAX_SIZE}.
*
* @see org.hibernate.cfg.AvailableSettings#QUERY_STATISTICS_MAX_SIZE
*/
String[] getQueries();
/**
* If {@value org.hibernate.cfg.AvailableSettings#LOG_SLOW_QUERY}
* is enabled, a map from the SQL query to the maximum execution time
* in milliseconds.
*
* @since 6.3
*
* @see org.hibernate.cfg.AvailableSettings#LOG_SLOW_QUERY
*/
Map getSlowQueries();
/**
* The names of all entities.
*/
String[] getEntityNames();
/**
* The names of all collection roles.
*/
String[] getCollectionRoleNames();
/**
* All second-level cache region names. For backwards compatibility,
* this method returns just the names of regions storing domain data,
* not query result cache regions.
*/
String[] getSecondLevelCacheRegionNames();
/**
* The number of transactions we know to have been successful.
*/
long getSuccessfulTransactionCount();
/**
* The number of transactions we know to have completed.
*/
long getTransactionCount();
/**
* The number of prepared statements that were acquired.
*/
long getPrepareStatementCount();
/**
* The number of prepared statements that were released.
*/
long getCloseStatementCount();
/**
* The number of Hibernate {@code StaleObjectStateException}s or JPA
* {@code OptimisticLockException}s that have occurred.
*/
long getOptimisticFailureCount();
/**
* The global number of query plans successfully retrieved from cache.
*/
long getQueryPlanCacheHitCount();
/**
* The global number of query plans lookups not found in cache.
*/
long getQueryPlanCacheMissCount();
}