druid 当方法使用ExecutorService在线程池中运行时,jdbc exectime统计不正确

5ssjco0h  于 2022-10-27  发布在  Druid
关注(0)|答案(7)|浏览(204)

日志:
2013-10-11 09:01:26 SEND_TOPIC-1
ERROR: slow sql 1860001 millis.
select * from ( select topicqueue0_.id as id1_31_, topicqueue0_.add_time as add_time2_31_, topicqueue0_.failed_count as failed_c3_31_, topicqueue0_.json_str as json_str4_31_, topicqueue0_.topic_bus_id as topic_bu5_31_ from comm_topic_queue topicqueue0_ order by topicqueue0_.add_time desc ) where rownum <= ?
[1000]

comm_topic_queue是个空表,从执行到打印出日志的时间没超过1s,但是日志记录了1860001 millis

ExecutorService 是随spring启动的
executor.execute(new Runnable() {
@OverRide
public void run()
{
busMethod();
}
});

private void busMethod()
{
    //logic ....
}
bzzcjhmw

bzzcjhmw1#

提供的信息再完整点,连接参数怎么配置的。日志也完整点,你的意思是日志里从刚开始到结束就几秒时间,但是: slow sql 1860001 millis. 有这么多吗? 而且你标题里的jdbc exectime 和正文里的slow sql也是两个概念, slowsql功能我觉得比较简单,全程不涉及多线程,我觉得是你自己什么地方搞错了。

whlutmcx

whlutmcx2#

1.截图中的10,11项是web请求后,业务逻辑在线程池中运行的,每个任务执行的时间都不会超过1s,截图中明显不对
2.截图中的第二项是正常的请求,时间统计也不对,请求时间才200多毫秒,jdbc用了10s
系统使用的是spring mvc,连接池的配置如下(spring annotation方式):
@value("#{jdbcProperties.url}")
private String jdbcUrl;
@value("#{jdbcProperties.username}")
private String username;
@value("#{jdbcProperties.password}")
private String password;
@value("#{jdbcProperties.schema}")
private String schema;
@value("#{jdbcProperties.validationQuery}")
private String validationQuery;

@bean(name = "dataSource", destroyMethod = "close")
@Autowired
public DataSource dataSource(ProjectEnv projectEnv)
{
DruidDataSource dataSource = new DruidDataSource();
// dataSource.setDriverClass(driverClassName);
if (jdbcUrl.trim().equalsIgnoreCase("jdbc:hsqldb:file:"))
{
jdbcUrl = jdbcUrl + ProjectEnv.getDataPath() + "/hsqldb/" + schema;
logger.info("使用HSQLDB作为数据库:{}", jdbcUrl);
}
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 配置初始化大小、最小、最大
dataSource.setInitialSize(1);
dataSource.setMinIdle(5);
dataSource.setMaxActive(100);
// 配置获取连接等待超时的时间
dataSource.setMaxWait(60000);
// 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(180000);
// 配置一个连接在池中最小生存的时间,单位是毫秒
dataSource.setMinEvictableIdleTimeMillis(300000);
dataSource.setValidationQuery(validationQuery);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnBorrow(false);
dataSource.setTestOnReturn(false);
// 打开PSCache,并且指定每个连接上PSCache的大小
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
// 配置监控统计拦截的filters
StatFilter statFilter = new StatFilter();
// statFilter.setMergeSql(true);
// statFilter.setLogSlowSql(true);
// statFilter.setSlowSqlMillis(10000);
List filters = Lists.newArrayList();
filters.add(statFilter);
dataSource.setProxyFilters(filters);
return dataSource;
}

web.xml的DruidWebStatFilter配置如下:
DruidWebStatFilter com.alibaba.druid.support.http.WebStatFilter exclusions .js,.gif,.jpg,.png,.css,.ico,/druid/_ principalSessionName currentLoginName DruidWebStatFilter /app/_

在 2013年11月15日星期五,yuqing 写道:

我觉得是你哪些地方搞错了,你标题里的jdbc exectime 和正文里的slow sql也是两个概念,
slowsql功能我觉得比较简单,全程不涉及多线程。


Reply to this email directly or view it on GitHubhttps://github.com//issues/462#issuecomment-28549915
.

您好!


礼!

陈培安

MAIL: peream@gmail.com
MOBILE: 13691517931

vawmfj5a

vawmfj5a3#

截图总用红色的框,或者箭头文字 标注一下的,

huus2vyu

huus2vyu4#

我没看到截图,你自己浏览器里能够看到截图? 如果可以的话,你最好能整理出一个testcase贴上来

enxuqcxy

enxuqcxy5#

我看不到的,所以让其整理一下,异常信息!不然看不明白!!

lymnna71

lymnna716#

前面用邮箱回复的,截图当成附件了,补一个

lokaqttq

lokaqttq7#

截图总用红色的框,或者箭头文字 标注一下的

相关问题