MySQL Others--select @@tx_read_only 执行频率较高问题
Posted 笑东风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL Others--select @@tx_read_only 执行频率较高问题相关的知识,希望对你有一定的参考价值。
问题描述
MySQL JDBC Driver 在 5.1.36 以下的版本且数据库版本大于 5.6.5,在每次 update/insert/delete 请求时,均会向后端数据库发送 select @@tx_read_only 命令,判断下当前会话的事务是否是只读。
MySQL JDBC Driver 在 5.1.36 以上,如果使用 execute() 而不是 executeUpdate() 方法的话,依然会发送 select @@tx_read_only 方法,参考 PreparedStatement#checkReadOnlySafeStatement。
解决方案
- 将MySQL JDBC Driver升级到5.1.36以上版本,新版本已优化此问题。
- 设置useLocalSessionState=true参数,这样Driver能从本地获取到当前会话的事务是否是只读,无需向MySQL服务器发起请求。
扩展阅读
-
参数tx_read_only和参数transaction_read_only等同,参数transaction_read_only在5.7.20被引入,参数tx_read_only在MySQL 8.0版本中被移除。
-
mysql-connector-java:8.0.28 存在bug,在判断事务autocommit参数时存在问题,会导致“事务”中的语句被立即提交。
mysql 修改事务隔离级别
语法:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
查看:
select @@global.tx_isolation;
select @@session.tx_isolation;
select @@tx_isolation;
以上是关于MySQL Others--select @@tx_read_only 执行频率较高问题的主要内容,如果未能解决你的问题,请参考以下文章
解决问题:java.sql.SQLException: Unknown system variable 'tx_isolation'