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

时间:2016-09-27 08:10:13

标签: java mysql database hibernate hikaricp

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

我们使用以下技术:

  • 的MySQL

  • 休眠

  • 光速

  • 弹簧

  • Tomcat的

我尝试过以下但是似乎没有帮助:

  • " SET autocommit = 0"在MySQL中

  • 在数据库连接URL中添加了elideSetAutoCommits属性。 " JDBC:MySQL的://本地主机/ DB_NAME了useUnicode =真安培;的characterEncoding = UTF-8和; pinGlobalTxToPhysicalConnection =真安培; elideSetAutoCommits =真"

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

1 个答案:

答案 0 :(得分:4)

  

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

您的查询是Connection#setAutoCommit(boolean)的结果,用于从默认模式自动提交模式切换到交易模式以便{ {1}}交易中的数据。

常用代码是:

insert/update/delete/read

这是一个解释how transactions work in JDBC的好链接。

如果您知道您的连接池将始终用于以事务模式获取连接,则可以在// 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); } 配置中设置默认模式,这要归功于参数Hikari设置为{ {1}}这样连接将处于事务模式,这样就不再需要它来修改模式。

  

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

有关false here的配置的详细信息。