HHH-9406 - Add method for get avg execution time for offen but really fast queries (where avg execution time ~0-1 ms)
This commit is contained in:
parent
3ef05dea2f
commit
e6d3ad5013
|
@ -31,4 +31,8 @@ public interface QueryStatistics extends Serializable {
|
||||||
long getExecutionMaxTime();
|
long getExecutionMaxTime();
|
||||||
|
|
||||||
long getExecutionMinTime();
|
long getExecutionMinTime();
|
||||||
|
|
||||||
|
long getExecutionTotalTime();
|
||||||
|
|
||||||
|
double getExecutionAvgTimeAsDouble();
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,39 +79,52 @@ public class ConcurrentQueryStatisticsImpl extends CategorizedStatistics impleme
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* average time in ms taken by the excution of this query onto the DB
|
* average time in ms taken by the execution of this query onto the DB
|
||||||
*/
|
*/
|
||||||
public long getExecutionAvgTime() {
|
public long getExecutionAvgTime() {
|
||||||
|
return (long) getExecutionAvgTimeAsDouble();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* average time in ms as double taken by the execution of this query onto the DB
|
||||||
|
*/
|
||||||
|
public double getExecutionAvgTimeAsDouble() {
|
||||||
// We write lock here to be sure that we always calculate the average time
|
// We write lock here to be sure that we always calculate the average time
|
||||||
// with all updates from the executed applied: executionCount and totalExecutionTime
|
// with all updates from the executed applied: executionCount and totalExecutionTime
|
||||||
// both used in the calculation
|
// both used in the calculation
|
||||||
writeLock.lock();
|
writeLock.lock();
|
||||||
try {
|
try {
|
||||||
long avgExecutionTime = 0;
|
double avgExecutionTime = 0;
|
||||||
if (executionCount.get() > 0) {
|
if (executionCount.get() > 0) {
|
||||||
avgExecutionTime = totalExecutionTime.get() / executionCount.get();
|
avgExecutionTime = totalExecutionTime.get() / (double) executionCount.get();
|
||||||
}
|
}
|
||||||
return avgExecutionTime;
|
return avgExecutionTime;
|
||||||
}
|
} finally {
|
||||||
finally {
|
|
||||||
writeLock.unlock();
|
writeLock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* max time in ms taken by the excution of this query onto the DB
|
* max time in ms taken by the execution of this query onto the DB
|
||||||
*/
|
*/
|
||||||
public long getExecutionMaxTime() {
|
public long getExecutionMaxTime() {
|
||||||
return executionMaxTime.get();
|
return executionMaxTime.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* min time in ms taken by the excution of this query onto the DB
|
* min time in ms taken by the execution of this query onto the DB
|
||||||
*/
|
*/
|
||||||
public long getExecutionMinTime() {
|
public long getExecutionMinTime() {
|
||||||
return executionMinTime.get();
|
return executionMinTime.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* total time in ms taken by the execution of this query onto the DB
|
||||||
|
*/
|
||||||
|
public long getExecutionTotalTime() {
|
||||||
|
return totalExecutionTime.get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add statistics report of a DB query
|
* add statistics report of a DB query
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate.stat.internal;
|
||||||
|
|
||||||
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code>ConcurrentQueryStatisticsTest</code> -
|
||||||
|
*
|
||||||
|
* @author Vlad Mihalcea
|
||||||
|
*/
|
||||||
|
public class ConcurrentQueryStatisticsTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
|
private ConcurrentQueryStatisticsImpl stats = new ConcurrentQueryStatisticsImpl(
|
||||||
|
"test" );
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStats() {
|
||||||
|
assertEquals( 0, stats.getExecutionTotalTime() );
|
||||||
|
assertEquals( Long.MAX_VALUE, stats.getExecutionMinTime() );
|
||||||
|
assertEquals( 0, stats.getExecutionMaxTime() );
|
||||||
|
assertEquals( 0, stats.getExecutionAvgTime() );
|
||||||
|
|
||||||
|
stats.executed( 1000, 12 );
|
||||||
|
|
||||||
|
assertEquals( 12, stats.getExecutionTotalTime() );
|
||||||
|
assertEquals( 12, stats.getExecutionMinTime() );
|
||||||
|
assertEquals( 12, stats.getExecutionMaxTime() );
|
||||||
|
assertEquals( 12, stats.getExecutionAvgTime() );
|
||||||
|
|
||||||
|
stats.executed( 200, 11 );
|
||||||
|
|
||||||
|
assertEquals( 23, stats.getExecutionTotalTime() );
|
||||||
|
assertEquals( 11, stats.getExecutionMinTime() );
|
||||||
|
assertEquals( 12, stats.getExecutionMaxTime() );
|
||||||
|
assertEquals( 11, stats.getExecutionAvgTime() );
|
||||||
|
assertEquals( 11.5, stats.getExecutionAvgTimeAsDouble(), 0.1 );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue