mybatis 打印Preparing : sql select ............. where id = ?时,是已经获得了连接还是没有拿连接 下边是日志,发现到准备sql时卡了16分钟。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public List<String> getRoleByUserxh(String userxh) { logger.debug("[+]getRoleByUserxh userxh={}",userxh); SPUserRoleExample example1 = new SPUserRoleExample(); example1.createCriteria().andUserxhEqualTo(userxh); List<SPUserRole> list2 = userRoleMapper.selectByExample(example1); List<String> rolecodes = new ArrayList<String>(); for(SPUserRole uo : list2){ rolecodes.add(uo.getRolecode()); } logger.debug("[+]getRoleByUserxh rolecodes={}",JsonUtil.getJsonString(rolecodes)); return rolecodes; } 你圈的两个log记录不是一个过程中的吧。至少不是Preparing Preparing只用了1ms,就是你圈的第二条和后面一条 连接时在进入service的时候拿到的。把连接池的配置贴上来。进入service:OrgService.getRoleByUserxh()到查询发出前的业务代码贴上来,是这块比较慢。 连接池配置 <bean id="ds_org" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url_org}" /> <property name="username" value="${jdbc_username_org}" /> <property name="password" value="${jdbc_password_org}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="30" /> <property name="minIdle" value="30" /> <property name="maxActive" value="200" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <!-- 数据库连接测试 --> <property name="validationQuery" value="SELECT 'x' FROM DUAL" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 600秒,也就是10分钟 --> <property name="removeAbandonedTimeout" value="600" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <!-- <property name="filters" value="stat" /> --> <property name="filters" value="mergeStat" /> <!-- Druid连接池自定义数据库密码加解密 --> <property name="passwordCallback" ref="dborgPasswordCallback"/> <property name="proxyFilters"> <list> <ref bean="statOrgFilter"/> </list> </property> </bean> 这个是OrgService里执行的方法,他之前没慢,圈红的第一条的时间就是这个方法的第一行。public List<String> getRoleByUserxh(String userxh) {logger.debug("[+]getRoleByUserxh userxh={}",userxh);SPUserRoleExample example1 = new SPUserRoleExample();example1.createCriteria().andUserxhEqualTo(userxh);List<SPUserRole> list2 = userRoleMapper.selectByExample(example1);List<String> rolecodes = new ArrayList<String>();for(SPUserRole uo : list2){rolecodes.add(uo.getRolecode());}logger.debug("[+]getRoleByUserxh rolecodes={}",JsonUtil.getJsonString(rolecodes));return rolecodes;} 看不出什么问题,如果service没有配置AOP的其他业务的话,应该是获取连接的时候比较慢,druid是提供强大的监控功能吧?把监控打开看一下连接池有没有异常。 你先分析一下你的sql 执行时间多少 索引有的,而且查询速度特别快,问题不在sql Server Tomcat v7.0 Server不能启动 hibernate 查询日期问题 javascript的数据提取问题,很紧急提问,请高手们回答! 大虾请进,菜鸟飞飞刚起步,请执教!!! ASP中的cstr()、cint()、clng()在JSP里分别是什么???? 再问一个javamail的中文问题 一个简单的问题 是什么意思 JSP中怎么连sybase数据库。 使用"http://abc.jsp?aa=妳好"時,在abc.jsp中取得的aa的值為亂碼! 迷茫的人生? 求助,thymeleaf判断空对象问题 空指针异常问题(springMVC)
logger.debug("[+]getRoleByUserxh userxh={}",userxh);
SPUserRoleExample example1 = new SPUserRoleExample();
example1.createCriteria().andUserxhEqualTo(userxh);
List<SPUserRole> list2 = userRoleMapper.selectByExample(example1);
List<String> rolecodes = new ArrayList<String>();
for(SPUserRole uo : list2){
rolecodes.add(uo.getRolecode());
}
logger.debug("[+]getRoleByUserxh rolecodes={}",JsonUtil.getJsonString(rolecodes));
return rolecodes;
}
Preparing只用了1ms,就是你圈的第二条和后面一条
把连接池的配置贴上来。
进入service:OrgService.getRoleByUserxh()到查询发出前的业务代码贴上来,是这块比较慢。
<bean id="ds_org" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url_org}" />
<property name="username" value="${jdbc_username_org}" />
<property name="password" value="${jdbc_password_org}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="30" />
<property name="minIdle" value="30" />
<property name="maxActive" value="200" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 数据库连接测试 -->
<property name="validationQuery" value="SELECT 'x' FROM DUAL" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true" />
<!-- 600秒,也就是10分钟 -->
<property name="removeAbandonedTimeout" value="600" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
<!-- 监控数据库 -->
<!-- <property name="filters" value="stat" /> -->
<property name="filters" value="mergeStat" /> <!-- Druid连接池自定义数据库密码加解密 -->
<property name="passwordCallback" ref="dborgPasswordCallback"/>
<property name="proxyFilters">
<list>
<ref bean="statOrgFilter"/>
</list>
</property> </bean>
public List<String> getRoleByUserxh(String userxh) {
logger.debug("[+]getRoleByUserxh userxh={}",userxh);
SPUserRoleExample example1 = new SPUserRoleExample();
example1.createCriteria().andUserxhEqualTo(userxh);
List<SPUserRole> list2 = userRoleMapper.selectByExample(example1);
List<String> rolecodes = new ArrayList<String>();
for(SPUserRole uo : list2){
rolecodes.add(uo.getRolecode());
}
logger.debug("[+]getRoleByUserxh rolecodes={}",JsonUtil.getJsonString(rolecodes));
return rolecodes;
}
索引有的,而且查询速度特别快,问题不在sql