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参数时存在问题,会导致“事务”中的语句被立即提交。

posted @   TeyGao  阅读(412)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2022-04-07 MySQL Transaction--MySQL锁升级引发的死锁问题
点击右上角即可分享
微信分享提示