getSqlSession和openConnection之间发生了什么

时间:2018-06-11 08:29:14

标签: mybatis spring-mybatis

我的springboot + mybatis服务非常慢,我分析日志并找到它:

[DEBUG 2018-06-11 15:30:06.295] [http-nio-9973-exec-1] logid:102789834531274752 org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:97) [Creating a new SqlSession]
[DEBUG 2018-06-11 15:30:06.296] [http-nio-9973-exec-1] logid:102789834531274752 org.mybatis.spring.SqlSessionUtils.registerSessionHolder(SqlSessionUtils.java:148) [SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@584909b4] was not registered for synchronization because synchronization is not active]
[DEBUG 2018-06-11 15:30:17.997] [http-nio-9973-exec-1] logid:102789834531274752 org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:87) [JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@1ebfd05a] will not be managed by Spring]
[DEBUG 2018-06-11 15:30:17.998] [http-nio-9973-exec-1] logid:102789834531274752 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) [==>  Preparing: SELECT `id`,`name`,`sales_group_id`,`advertiser_id`,`agent_id`,`industry_id`,`contract_id`,`cast_system_id`,`traffic_category_id`,`distinct_type_id`,`dsp_id`,`dsp_name`,`push_ratio`,`executor_name`,`direct_sales_name`,`agent_sales_name`,`description`,`region_id`,`customer_type_id`,`creator_id`,`creator_name`,`create_time`,`update_time`,`audit_status_id`,`run_status_id`,`version`,`begin_date`,`end_date`,`cipdx`,`progress` FROM campaign_info WHERE id = ? ]
[DEBUG 2018-06-11 15:30:17.998] [http-nio-9973-exec-1] logid:102789834531274752 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) [==> Parameters: 1(Integer)]
[DEBUG 2018-06-11 15:30:19.107] [http-nio-9973-exec-1] logid:102789834531274752 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:181) [<==      Total: 0]
[DEBUG 2018-06-11 15:30:19.107] [http-nio-9973-exec-1] logid:102789834531274752 org.mybatis.spring.SqlSessionUtils.closeSqlSession(SqlSessionUtils.java:191) [Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@584909b4]]

org.mybatis.spring.SqlSessionUtils.getSqlSessionorg.mybatis.spring.transaction.SpringManagedTransaction.openConnection之间差距约为10秒,那么发生了什么?是我的mysql很慢吗?或者我的春季服务有什么错误?

1 个答案:

答案 0 :(得分:0)

主要嫌疑人正在打开与数据库的连接,因为当时正在发生这种情况。

您正在使用连接池,因此很可能池中的所有连接都很忙,并且此特定客户端一直在等待,直到某些连接返回到池中。

要检查是否是这种情况,您可以检查连接池文档,了解如何在将连接借用/返回到池时启用日志记录,或者为DEBUG记录器启用org.springframework.jdbc.datasource.DataSourceUtils日志记录。

另一个可能的原因是打开连接很慢。您可以使用一些使用jdbc直接连接数据库的简单程序(如this)来检查。