MySQL中有大量"SET autocommit = 0/1"查询

sti*_*kku 5 java mysql database hibernate hikaricp

我正在我们的系统上运行一些负载测试,我注意到正在执行大量的"SET autocommit = 0"和"SET autocommit = 1"查询.1分钟内大约25,000左右.我试图找出导致这种情况的原因以及如何摆脱它.

我们使用以下技术:

  • MySQL的

  • 过冬

  • 阿光

  • 弹簧

  • Tomcat的

我尝试了以下但它似乎没有帮助:

  • MySQL中的"SET autocommit = 0"

  • 在db连接URL中添加了elideSetAutoCommits属性."JDBC:MySQL的://本地主机/ DB_NAME了useUnicode =真的characterEncoding = UTF-8&pinGlobalTxToPhysicalConnection =真elideSetAutoCommits =真"

有人能指出我可能导致这些查询的原因吗?

Nic*_*tto 5

有人可以指出导致这些查询的原因吗?

查询的结果Connection#setAutoCommit(boolean)是用来从默认模式(自动提交模式)切换到事务模式,以便insert/update/delete/read在事务中进行数据查询。

常见的代码是:

// Switch to transactional mode which actually triggers a SET autocommit = 0
con.setAutoCommit(false);
try {
    // Some operations on the db
    con.commit();
} finally {
    // Switch back to auto-commit mode which actually triggers a SET autocommit = 1
    con.setAutoCommit(true);
} 
Run Code Online (Sandbox Code Playgroud)

这是一个很好的链接,它说明了事务的工作方式JDBC


如果您知道您的连接池将始终用于以事务方式获取连接,则可以通过在配置中设置默认模式,Hikari这要感谢将参数autoCommit设置为false这种方式,从而使连接已经处于事务方式,从而可以不再需要修改模式。

此属性控制从池返回的连接的默认自动提交行为。它是一个布尔值。默认:true

有关Hikari 此处配置的更多详细信息。