我正在我们的系统上运行一些负载测试,我注意到正在执行大量“SET autocommit=0”和“SET autocommit=1”查询。 1 分钟内大约有 25,000 个。我试图找出造成这种情况的原因以及如何消除它。
我们使用以下技术:
MySQL
休眠
Hikari
Spring
Tomcat
我已尝试以下方法,但似乎没有帮助:
MySQL 中的“SET autocommit = 0”
在数据库连接 URL 中添加了 elideSetAutoCommits 属性。 “jdbc:mysql://localhost/db_name?useUniCode=true&characterEncoding=UTF-8&pinGlobalTxToPhysicalConnection=true&elideSetAutoCommits=true”
有人可以指出我可能导致这些查询的原因吗?
有人可以指出我可能导致这些查询的原因吗?
您的查询的结果是Connection#setAutoCommit(boolean) https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#setAutoCommit-boolean-用于从默认模式切换自动提交模式 to 交易模式为了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);
}
这是一个很好的链接,解释了交易如何运作JDBC https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html.
如果您知道您的连接池将始终用于以事务模式获取连接,则可以在配置中设置默认模式Hikari
感谢参数autoCommit
设置为false
这样,连接将已经处于事务模式,因此不再需要修改模式。
该属性控制连接的默认自动提交行为
从泳池回来。它是一个布尔值。默认:true
有关配置的更多详细信息Hikari
here https://github.com/brettwooldridge/HikariCP/wiki/Configuration.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)