Merge pull request #97 from wenshao/master

添加统计信息BlobOpenCount
This commit is contained in:
温高铁
2012-08-27 06:48:11 -07:00
8 changed files with 143 additions and 13 deletions
@@ -507,7 +507,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
if (index != 0) {
out.writeComma();
}
Object value = parameter.getValue();
if (value == null) {
out.writeNull();
@@ -685,6 +685,52 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
return clob;
}
@Override
public Blob callableStatement_getBlob(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
throws SQLException {
Blob blob = chain.callableStatement_getBlob(statement, parameterIndex);
if (blob != null) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, blob);
}
return blob;
}
@Override
public Blob callableStatement_getBlob(FilterChain chain, CallableStatementProxy statement, String parameterName)
throws SQLException {
Blob blob = chain.callableStatement_getBlob(statement, parameterName);
if (blob != null) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, blob);
}
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)
throws SQLException {
@@ -716,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;
}
@@ -728,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;
}
@@ -739,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;
}
@@ -751,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;
}
@@ -763,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;
}
@@ -776,6 +842,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (Blob) obj);
}
return obj;
}
@@ -788,6 +858,10 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (Blob) obj);
}
return obj;
}
@@ -801,13 +875,34 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj);
}
if (obj instanceof Blob) {
blobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (Blob) obj);
}
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);
}
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) {
dataSourceStat.incrementClobOpenCount();
@@ -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() {
}
}
@@ -815,7 +815,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
discardConnection(holder.getConnection());
return;
}
final long lastActiveTimeMillis = System.currentTimeMillis();
lock.lockInterruptibly();
try {
@@ -1774,6 +1774,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
dataMap.put("ConnectionHoldTimeHistogram", this.getDataSourceStat().getConnectionHoldHistogram().toArray());
dataMap.put("RemoveAbandoned", this.isRemoveAbandoned());
dataMap.put("ClobOpenCount", this.getDataSourceStat().getClobOpenCount());
dataMap.put("BlobOpenCount", this.getDataSourceStat().getBlobOpenCount());
return dataMap;
}
@@ -68,6 +68,8 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean {
private final AtomicLong clobOpenCount = new AtomicLong();
private final AtomicLong blobOpenCount = new AtomicLong();
public JdbcDataSourceStat(String name, String url){
this(name, url, null);
}
@@ -101,6 +103,7 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean {
}
public void reset() {
blobOpenCount.set(0);
clobOpenCount.set(0);
connectionStat.reset();
@@ -318,4 +321,12 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean {
clobOpenCount.incrementAndGet();
}
public long getBlobOpenCount() {
return blobOpenCount.get();
}
public void incrementBlobOpenCount() {
blobOpenCount.incrementAndGet();
}
}
@@ -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;
}
@@ -30,7 +30,9 @@
"NotEmptyWaitMillis", "WaitThreadCount", "StartTransactionCount", "TransactionHistogram", "PoolingCount", "PoolingPeak",
"PoolingPeakTime", "ActiveCount", "ActivePeak", "ActivePeakTime", "LogicConnectCount", "LogicCloseCount", "LogicConnectErrorCount",
"PhysicalConnectCount", "PhysicalCloseCount", "PhysicalConnectErrorCount", "ExecuteCount", "ErrorCount", "CommitCount",
"RollbackCount", "PSCacheAccessCount", "PSCacheHitCount", "PSCacheMissCount", "ConnectionHoldTimeHistogram"]
"RollbackCount", "PSCacheAccessCount", "PSCacheHitCount", "PSCacheMissCount", "ConnectionHoldTimeHistogram",
"ClobOpenCount", "BlobOpenCount"
]
var descs = ["Specify the username used when creating a new connection.",
"The JDBC driver connection URL", "database type", "The fully qualifed name of the JDBC driver class",
"All the fully qualifed name of the filter classes", " Test or not when borrow a connection", "Test or not when return a connection",
@@ -42,7 +44,9 @@
"The usefull connection peak time", "The current active connection count", "The current active connection peak count", "The active connection peak time",
"Total connect times from datasource", "Total close connect times from datasource", "Total connect error times",
"Create physical connnection count", "Close physical connnection count", "Total physical connect error times", "", "", "",
"", "PerpareStatement access count", "PerpareStatement hit count", "PerpareStatement miss count", "The histogram values of connection hold time, [0-1 ms, 1-10 ms, 10-100 ms, 100ms-1s, 1-10 s, 10-100 s, 100-1000 s, >1000 s]"]
"", "PerpareStatement access count", "PerpareStatement hit count", "PerpareStatement miss count", "The histogram values of connection hold time, [0-1 ms, 1-10 ms, 10-100 ms, 100ms-1s, 1-10 s, 10-100 s, 100-1000 s, >1000 s]",
"", ""
]
return {
init : function() {
druid.common.buildHead(1);