From 1b77dfda4372fb42c4caf187cfc0728290c9b9cd Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 23 Aug 2012 07:34:54 +0800 Subject: [PATCH] refactor clob stat --- .../alibaba/druid/filter/stat/StatFilter.java | 53 ++++++++++--------- .../druid/stat/JdbcDataSourceStat.java | 12 +---- .../com/alibaba/druid/stat/JdbcSqlStat.java | 19 ++++--- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 06c4eebc29..ceae368ece 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -54,12 +54,13 @@ import com.alibaba.druid.support.logging.LogFactory; * @author wenshao */ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { + private final static Log LOG = LogFactory.getLog(StatFilter.class); - + private static final String SYS_PROP_LOG_SLOW_SQL = "druid.stat.logSlowSql"; private static final String SYS_PROP_SLOW_SQL_MILLIS = "druid.stat.slowSqlMillis"; private static final String SYS_PROP_MERGE_SQL = "druid.stat.mergeSql"; - + public final static String ATTR_NAME_CONNECTION_STAT = "stat.conn"; public final static String ATTR_NAME_STATEMENT_STAT = "stat.stmt"; public final static String ATTR_UPDATE_COUNT = "stat.updteCount"; @@ -688,7 +689,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Clob clob = chain.resultSet_getClob(resultSet, columnIndex); if (clob != null) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) clob); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), resultSet, (ClobProxy) clob); } return clob; @@ -699,7 +700,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Clob clob = chain.resultSet_getClob(resultSet, columnLabel); if (clob != null) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) clob); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), resultSet, (ClobProxy) clob); } return clob; @@ -711,7 +712,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Clob clob = chain.callableStatement_getClob(statement, parameterIndex); if (clob != null) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) clob); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) clob); } return clob; @@ -723,7 +724,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Clob clob = chain.callableStatement_getClob(statement, parameterName); if (clob != null) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) clob); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) clob); } return clob; @@ -734,7 +735,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.resultSet_getObject(result, columnIndex); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj); } return obj; @@ -746,7 +747,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.resultSet_getObject(result, columnIndex, map); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj); } return obj; @@ -757,7 +758,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.resultSet_getObject(result, columnLabel); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj); } return obj; @@ -769,7 +770,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.resultSet_getObject(result, columnLabel, map); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), result, (ClobProxy) obj); } return obj; @@ -781,7 +782,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.callableStatement_getObject(statement, parameterIndex); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj); } return obj; @@ -793,7 +794,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.callableStatement_getObject(statement, parameterIndex, map); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj); } return obj; @@ -805,7 +806,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.callableStatement_getObject(statement, parameterName); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj); } return obj; @@ -818,26 +819,26 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { Object obj = chain.callableStatement_getObject(statement, parameterName, map); if (obj instanceof Clob) { - clobOpenAfter(chain.getDataSource().getDataSourceStat(), (ClobProxy) obj); + clobOpenAfter(chain.getDataSource().getDataSourceStat(), statement, (ClobProxy) obj); } return obj; } - private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, ClobProxy clob) { + private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, ResultSetProxy rs, ClobProxy clob) { + clobOpenAfter(dataSourceStat, rs.getStatementProxy(), clob); + } + + private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, StatementProxy stmt, ClobProxy clob) { dataSourceStat.incrementClobOpenCount(); + + if (stmt != null) { + JdbcSqlStat sqlStat = stmt.getSqlStat(); + if (sqlStat != null) { + sqlStat.incrementClobOpenCount(); + } + } StatFilterContext.getInstance().clob_open(); } - - @Override - public void clob_free(FilterChain chain, ClobProxy wrapper) throws SQLException { - chain.clob_free(wrapper); - - JdbcDataSourceStat dataSourceStat = chain.getDataSource().getDataSourceStat(); - dataSourceStat.incrementClobFreeCount(); - - StatFilterContext.getInstance().clob_free(); - } - } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java index 8f5d92674b..a61281c526 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java @@ -67,7 +67,6 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { private final ConcurrentMap connections = new ConcurrentHashMap(); private final AtomicLong clobOpenCount = new AtomicLong(); - private final AtomicLong clobFreeCount = new AtomicLong(); public JdbcDataSourceStat(String name, String url){ this(name, url, null); @@ -103,7 +102,6 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { public void reset() { clobOpenCount.set(0); - clobFreeCount.set(0); connectionStat.reset(); statementStat.reset(); @@ -315,17 +313,9 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { public long getClobOpenCount() { return clobOpenCount.get(); } - + public void incrementClobOpenCount() { clobOpenCount.incrementAndGet(); } - public long getClobFreeCount() { - return clobFreeCount.get(); - } - - public void incrementClobFreeCount() { - clobFreeCount.incrementAndGet(); - } - } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index a9b3e3e08c..7b70783fd3 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -215,7 +215,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { fetchRowCountHistogram.reset(); updateCountHistogram.reset(); executeAndResultHoldTimeHistogram.reset(); - + clobOpenCount.set(0); } @@ -257,11 +257,11 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { public long getFetchRowCountMax() { return fetchRowCountMax.get(); } - + public long getClobOpenCount() { return clobOpenCount.get(); } - + public void incrementClobOpenCount() { clobOpenCount.incrementAndGet(); } @@ -488,6 +488,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { new ArrayType(SimpleType.LONG, true), // SimpleType.LONG, // SimpleType.LONG, // + SimpleType.LONG, // }; @@ -534,11 +535,12 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { "ExecuteAndResultSetHoldTime", // "FetchRowCountHistogram", // - // 30 + // 30 - 34 "EffectedRowCountHistogram", // "ExecuteAndResultHoldTimeHistogram", // "EffectedRowCountMax", // - "FetchRowCountMax" + "FetchRowCountMax", // + "ClobOpenCount", // }; @@ -606,9 +608,10 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { map.put("FetchRowCountHistogram", this.getFetchRowCountHistogram().toArray()); // 29 map.put("EffectedRowCountHistogram", this.getUpdateCountHistogram().toArray()); // 30 - map.put("ExecuteAndResultHoldTimeHistogram", this.getExecuteAndResultHoldTimeHistogram().toArray()); // 30 - map.put("EffectedRowCountMax", getUpdateCountMax()); - map.put("FetchRowCountMax", getFetchRowCountMax()); + map.put("ExecuteAndResultHoldTimeHistogram", this.getExecuteAndResultHoldTimeHistogram().toArray()); // 31 + map.put("EffectedRowCountMax", getUpdateCountMax()); // 32 + map.put("FetchRowCountMax", getFetchRowCountMax()); // 33 + map.put("ClobOpenCount", getClobOpenCount()); // 34 return map; }