0

我有简单的 spring + hibernate + mysql 项目。打开 mysql 服务器上的查询日志,我看到很多频繁的“SET autocommit=0;commit;SET autocommit=0”语句,而没有在我的应用程序上执行任何操作。

我的应用程序的哪个进程/为什么执行这些频繁查询?我在下面列出了连接池配置。

请注意:

  • 通常的 sql 查询(来自我的应用程序)正在工作并在此处记录
  • 这些日志非常频繁,例如每秒 1-4 个。
  • 如果我取消部署我的应用程序,所有这些“SET autocommit=0;commit;SET autocommit=0”日志将停止

    131001 10:41:31 2046 查询 SET autocommit=0 2046 查询提交 2046 查询 SET autocommit=1 2046 查询 SET autocommit=0 2046 查询提交 2046 查询 SET autocommit=1 2046 查询 SET autocommit=0 2046 查询提交 2046 查询 SET autocommit= 1 2061 查询 SET autocommit=0 2061 查询提交 2061 查询 SET autocommit=1 2061 查询 SET autocommit=0 2061 查询提交 2061 查询 SET autocommit=1 2061 查询 SET autocommit=0 2061 查询提交 2061 查询 SET autocommit=1 131001 10:41 :34 2051 查询 SET 自动提交=0 2051 查询提交 2051 查询 SET 自动提交=1 2051 查询 SET 自动提交=0 2051 查询提交 2051 查询 SET 自动提交=1 2051 查询 SET 自动提交=0 2051 查询提交 2051 查询 SET 自动提交=1 2047 查询 SET 自动提交=0

    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
         <property name="driverClass" value="com.mysql.jdbc.Driver" />
         <property name="jdbcUrl" value="" />
         <property name="username" value="..."/>
         <property name="password" value="..."/>
         <property name="idleConnectionTestPeriodInMinutes" value="60"/>
         <property name="idleMaxAgeInMinutes" value="240"/>      
         <property name="maxConnectionsPerPartition" value="30"/>
         <property name="minConnectionsPerPartition" value="5"/>
         <property name="partitionCount" value="3"/>
         <property name="acquireIncrement" value="5"/>                              
         <property name="statementsCacheSize" value="300"/>
         <property name="releaseHelperThreads" value="3"/>
         <property name="connectionTestStatement" value="/* ping *\/ SELECT 8"/>
    
     </bean>
    
4

1 回答 1

1

当您的应用程序启动事务时会输出这些日志。尝试转储堆栈跟踪jstack并查看哪些线程以及何时打开事务。

一些参考资料:

innodb 和自动提交
jstack

于 2013-10-01T08:24:25.267 回答