add blob open count stat

This commit is contained in:
wenshao
2012-08-27 21:47:00 +08:00
parent 2db857b5fe
commit 34b13e764f
5 changed files with 83 additions and 9 deletions
@@ -708,6 +708,28 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
return blob;
}
@Override
public Blob resultSet_getBlob(FilterChain chain, ResultSetProxy result, int columnIndex) throws SQLException {
Blob blob = chain.resultSet_getBlob(result, columnIndex);
if (blob != null) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, blob);
}
return blob;
}
@Override
public Blob resultSet_getBlob(FilterChain chain, ResultSetProxy result, String columnLabel) throws SQLException {
Blob blob = chain.resultSet_getBlob(result, columnLabel);
if (blob != null) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, blob);
}
return blob;
}
@Override
public Clob callableStatement_getClob(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
@@ -740,6 +762,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (obj instanceof Clob) {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (Blob) obj);
}
return obj;
}
@@ -752,6 +778,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (obj instanceof Clob) {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (Blob) obj);
}
return obj;
}
@@ -763,6 +793,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (obj instanceof Clob) {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (Blob) obj);
}
return obj;
}
@@ -775,6 +809,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (obj instanceof Clob) {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (Blob) obj);
}
return obj;
}
@@ -787,6 +825,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (obj instanceof Clob) {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (Blob) obj);
}
return obj;
}
@@ -839,6 +881,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
return obj;
}
private void blobOpenAfter(JdbcDataSourceStat dataSourceStat, ResultSetProxy rs, Blob blob) {
blobOpenAfter(dataSourceStat, rs.getStatementProxy(), blob);
}
private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, ResultSetProxy rs, ClobProxy clob) {
clobOpenAfter(dataSourceStat, rs.getStatementProxy(), clob);
@@ -846,6 +892,15 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
private void blobOpenAfter(JdbcDataSourceStat dataSourceStat, StatementProxy stmt, Blob blob) {
dataSourceStat.incrementBlobOpenCount();
if (stmt != null) {
JdbcSqlStat sqlStat = stmt.getSqlStat();
if (sqlStat != null) {
sqlStat.incrementBlobOpenCount();
}
}
StatFilterContext.getInstance().blob_open();
}
private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, StatementProxy stmt, ClobProxy clob) {
@@ -130,11 +130,12 @@ public class StatFilterContext {
listener.clob_open();
}
}
public void clob_free() {
public void blob_open() {
for (int i = 0; i < listeners.size(); ++i) {
StatFilterContextListener listener = listeners.get(i);
listener.clob_free();
listener.blob_open();
}
}
}
@@ -43,5 +43,5 @@ public interface StatFilterContextListener {
void clob_open();
void clob_free();
void blob_open();
}
@@ -81,11 +81,12 @@ public class StatFilterContextListenerAdapter implements StatFilterContextListen
public void clob_open() {
}
@Override
public void clob_free() {
public void blob_open() {
}
}
@@ -76,6 +76,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
private boolean removed = false;
private final AtomicLong clobOpenCount = new AtomicLong();
private final AtomicLong blobOpenCount = new AtomicLong();
private final Histogram histogram = new Histogram(new long[] { //
//
@@ -223,6 +224,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
updateCountHistogram.reset();
executeAndResultHoldTimeHistogram.reset();
blobOpenCount.set(0);
clobOpenCount.set(0);
}
@@ -272,6 +274,14 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
public void incrementClobOpenCount() {
clobOpenCount.incrementAndGet();
}
public long getBlobOpenCount() {
return blobOpenCount.get();
}
public void incrementBlobOpenCount() {
blobOpenCount.incrementAndGet();
}
public long getId() {
return id;
@@ -394,7 +404,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
long current = executeSpanNanoMax.get();
if (current < nanoSpan) {
if (executeSpanNanoMax.compareAndSet(current, nanoSpan)) {
// 可能不准确,但是绝大多数情况下都会正确,性能换取一致性
// 可能不准确,但是绝大多数情况下都会正确,性能换取一致性
executeNanoSpanMaxOccurTime = System.currentTimeMillis();
break;
@@ -489,13 +499,15 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
SimpleType.LONG, //
new ArrayType<Long>(SimpleType.LONG, true), //
// 30 -
// 30 - 34
new ArrayType<Long>(SimpleType.LONG, true), //
new ArrayType<Long>(SimpleType.LONG, true), //
SimpleType.LONG, //
SimpleType.LONG, //
SimpleType.LONG, //
// 35 -
SimpleType.LONG, //
};
@@ -548,6 +560,9 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
"EffectedRowCountMax", //
"FetchRowCountMax", //
"ClobOpenCount",
// 35 -
"BlobOpenCount",
//
};
@@ -619,6 +634,8 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
map.put("EffectedRowCountMax", getUpdateCountMax()); // 32
map.put("FetchRowCountMax", getFetchRowCountMax()); // 33
map.put("ClobOpenCount", getClobOpenCount()); // 34
map.put("BlobOpenCount", getBlobOpenCount()); // 35
return map;
}