mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
add blob open count stat
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user