发现问题

在一次捞取Top SQL中,发现DB大量执行 select @@session.tx_read_only,几乎每一条DML语句前,都会有这么一个sql。但是应用层并没有做特殊处理,那么这个SQL语句有什么作用?是谁执行了它?

详细介绍

此sql的作用主要是判断事务是否为只读事务。MySQL自身会对只读事务做优化,这是 MySQL5.6.5 版本 以后才出现的。 http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_tx_read_only

定位到MySQL的驱动包

ConnectionImpl.java :

可以看到,在if条件中,对MySQL的 版本 做了判断,同时也有!getUseLocalSessionState()  这么一个条件,对应 JDBC参数useLocalSessionState ,当这个值为false时,会发出select @@session.tx_read_only; 这条sql。

默认情况下,我们的连接串信息没有包含useLocalSessionState参数的设置,这个值默认为false。

这个值的作用是驱动程序是否使用autocommit,read_only和transaction isolation的内部值(jdbc端的本地值)。

如果设置为false,则需要这个判断这三个参数的,都需要发语句到远端请求,比如更新语句前,

需要发语句select @@session.tx_read_only确认会话是否只读。

如果设置为true,则只需要取本地值即可。这可以解释为什么有的实例 select @@session.tx_read_only语句很多。

一般情况下,驱动可以保证本地值与远程服务器值保持一致。当应用调用setAutoCommit, setTransactionIsolation 和 setReadOnly这三个接口设置参数值时,会与远程服务器同步。

具体而言,

当useLocalSessionState为true时,若值与本地值不一致,则发往远程更新;

当useLocalSessionState为false时,无论设置值与本地值是否一致,每次都发往远程更新。这可以解释为什么有些实例set autocommit语句比较多。

但是,若用户设置参数时不通过JDBC接口(比如setAutoCommit),而是执行语句'set autocommit=xxx'设置, 那么就会存在本地值与远程不一致的情况,进而可能导致修改参数useLocalSessionState后,业务逻辑发生变化。

相关设置的SQL语句:set autocommit=0 /*设置会话自动提交模式*/ 对应的JDBC接口: setAutoCommit(false)

set tx_isolation='read-committed' /*设置事务的隔离级别*/ 对应的JDBC接口:setTransactionIsolation('read-committed')

set tx_read_only=0; /*设置只读事务*/ 对应的JDBC接口:setReadOnly(false)

设置useLocalSessionState默认值为ture,可能导致业务逻辑含义发生变化。触发的条件是,用户通过SQL语句直接设置自动提交参数,隔离级别参数或只读事务参数。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对爱安网的支持。

mysql tx read only_DB为何大量出现select @@session.tx_read_only 详解相关推荐

  1. mysql insert into as_mysql insert into select使用方法详解

    mysql insert into select使用方法详解2017-11-22 15:47 我们先来看看mysql insert into select的语法规则. INSERT [LOW_PRIO ...

  2. SQL语句 SELECT LIKE用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  3. mysql5.7.11 linux_CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本教程详解...

    MySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定发行版安装包(如 .rpm)以及二进制通用版安装包(.tar.gz).一般情况下,很多项目都倾向于采用二进制通用安装包形式来进行安 ...

  4. select @@session.tx_read_only

    问题描述: 研发反馈,他们的DB做了读写分离,主库都是写入流量,所有的读操作都在从库:但是为什么主库上面的SELECT是INSERT的两倍? 希望可以查找root cause,否则告警QPS 是400 ...

  5. Python中的select、epoll详解

    Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...

  6. c if 判断select已经选择的值_「Linux」——select和epoll详解

    select和epoll详解 select和epoll的区别(面试常考) select 一.什么是select 1.select函数原型 2.参数解释 3.参数timeout取值 4.返回值 5.监控 ...

  7. 【C/C++服务器开发】文件,文件描述符,I/O多路复用,select / poll / epoll 详解

    文章目录 一.前言 1.文件的概念 2.文件描述符和文件指针 文件描述符 文件描述符和文件指针的区别 文件描述符太多了怎么办 二.I/O多路复用 1.I/O多路复用的由来 不要打电话给我,有需要我会打 ...

  8. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. mysql添加两种数据类型_MySQL入门(二) 数据库数据类型详解

    序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...

  10. mysql linux centos7_MySQL在Linux centos7环境下安装教程详解(图)

    这篇文章主要为大家详细介绍了Linux centos7环境下MySQL安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Linux centos7环境下安装MySQL步骤的详细介绍 安装My ...

最新文章

  1. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
  2. codevs 爱改名的小融
  3. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - A. 奖券数目
  4. angularJs动画 --实例
  5. 运用贪心思想解决跳跃游戏
  6. python中dump用法_python中json庫中的load、loads、dump、dumps的區別與用法
  7. 函数实现-aoti-atol
  8. 数据结构实验之栈八:栈的基本操作
  9. Python问题3——爬虫编码问题
  10. Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
  11. JavaScript的调用栈、回调队列和事件循环
  12. 弃用微软 C++ 编译器,Win 版 Chrome 改用 Clang
  13. APP开发难吗?澳大利亚10岁儿童已开发5个手机App
  14. 计算机网络概论简单题,第一章计算机网络概述练习题
  15. 计算机er在本科如何争取发论文?
  16. win7虚拟机无法读取U盘或密钥常见解决方法
  17. 使用AIDL实现Android的跨进程通信
  18. 实战! excel常用函数中lookup的用法
  19. 互联网金融学习总结(2)——互联网金融风控的应用场景及风控手段
  20. ios  关闭更新(第三方软件 添加描述文件)

热门文章

  1. 每日一句20200103
  2. 190507每日一句
  3. opencv 鼠标的使用
  4. Atitit rdmng 研发管理重要的领域 目录 第一章 编程语言 1 第一节 Dsl 1 第二章 编程方法与理念 通用化vs 专用化 1 第一节 动态化 1 第三章 框架与工具 通用vs专用
  5. Atitit 实体的概念与理解 目录 1. 使用不同的语言来描述实体 1 1.1. H5 table dom模型 json 1 1.2. Sql table 1 1.3. Java class m
  6. Atitit、 知识管理法 目录 1. 信息管理的演进 1 2. 显性知识管理 1 3. 隐形知识 1 4. 知识产权保护 1 1.信息管理的演进 文献管理,计算机管理,信息资源管理,情报管理,直
  7. 目录 1. 数据库优化漏斗法则 1 2. 常见优化手段 2 2.1. 索引 2 2.2. 分页 只返回需要的字段 2 2.3. 批处理 2 2.4. 其他 sp 多线程等 2 3. 索引类型 n
  8. Atitit 减少财政支出之减少通讯支出 解决方案attilax总结
  9. paip.php 与js 的相似性以及为什么它们这么烂还很流行。。
  10. (转)DevOps,就是开发吃掉运维?