我在我们的系统上运行了一些负载测试,我注意到大量的" 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 =真"
有人能指出我可能导致这些查询的原因吗?
答案 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的配置的详细信息。