mysql tx read only_DB为何大量出现select @@session.tx_read_only 详解
发现问题
在一次捞取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 详解相关推荐
- mysql insert into as_mysql insert into select使用方法详解
mysql insert into select使用方法详解2017-11-22 15:47 我们先来看看mysql insert into select的语法规则. INSERT [LOW_PRIO ...
- SQL语句 SELECT LIKE用法详解
在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...
- mysql5.7.11 linux_CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本教程详解...
MySQL 目前的最新版本是 5.7.11,在 Linux 下提供特定发行版安装包(如 .rpm)以及二进制通用版安装包(.tar.gz).一般情况下,很多项目都倾向于采用二进制通用安装包形式来进行安 ...
- select @@session.tx_read_only
问题描述: 研发反馈,他们的DB做了读写分离,主库都是写入流量,所有的读操作都在从库:但是为什么主库上面的SELECT是INSERT的两倍? 希望可以查找root cause,否则告警QPS 是400 ...
- Python中的select、epoll详解
Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...
- c if 判断select已经选择的值_「Linux」——select和epoll详解
select和epoll详解 select和epoll的区别(面试常考) select 一.什么是select 1.select函数原型 2.参数解释 3.参数timeout取值 4.返回值 5.监控 ...
- 【C/C++服务器开发】文件,文件描述符,I/O多路复用,select / poll / epoll 详解
文章目录 一.前言 1.文件的概念 2.文件描述符和文件指针 文件描述符 文件描述符和文件指针的区别 文件描述符太多了怎么办 二.I/O多路复用 1.I/O多路复用的由来 不要打电话给我,有需要我会打 ...
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- mysql添加两种数据类型_MySQL入门(二) 数据库数据类型详解
序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...
- mysql linux centos7_MySQL在Linux centos7环境下安装教程详解(图)
这篇文章主要为大家详细介绍了Linux centos7环境下MySQL安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Linux centos7环境下安装MySQL步骤的详细介绍 安装My ...
最新文章
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
- codevs 爱改名的小融
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - A. 奖券数目
- angularJs动画 --实例
- 运用贪心思想解决跳跃游戏
- python中dump用法_python中json庫中的load、loads、dump、dumps的區別與用法
- 函数实现-aoti-atol
- 数据结构实验之栈八:栈的基本操作
- Python问题3——爬虫编码问题
- Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
- JavaScript的调用栈、回调队列和事件循环
- 弃用微软 C++ 编译器,Win 版 Chrome 改用 Clang
- APP开发难吗?澳大利亚10岁儿童已开发5个手机App
- 计算机网络概论简单题,第一章计算机网络概述练习题
- 计算机er在本科如何争取发论文?
- win7虚拟机无法读取U盘或密钥常见解决方法
- 使用AIDL实现Android的跨进程通信
- 实战! excel常用函数中lookup的用法
- 互联网金融学习总结(2)——互联网金融风控的应用场景及风控手段
- ios 关闭更新(第三方软件 添加描述文件)
热门文章
- 每日一句20200103
- 190507每日一句
- opencv 鼠标的使用
- Atitit rdmng 研发管理重要的领域 目录 第一章 编程语言	1 第一节 Dsl	1 第二章 编程方法与理念 通用化vs 专用化	1 第一节 动态化	1 第三章 框架与工具 通用vs专用
- Atitit 实体的概念与理解 目录 1. 使用不同的语言来描述实体	1 1.1. H5 table dom模型 json	1 1.2. Sql table	1 1.3. Java class m
- Atitit、 知识管理法 目录 1. 信息管理的演进	1 2. 显性知识管理	1 3. 隐形知识	1 4. 知识产权保护	1 1.信息管理的演进 文献管理,计算机管理,信息资源管理,情报管理,直
- 目录 1. 数据库优化漏斗法则	1 2. 常见优化手段	2 2.1. 索引	2 2.2. 分页 只返回需要的字段	2 2.3. 批处理	2 2.4. 其他 sp 多线程等	2 3. 索引类型 n
- Atitit 减少财政支出之减少通讯支出 解决方案attilax总结
- paip.php 与js 的相似性以及为什么它们这么烂还很流行。。
- (转)DevOps,就是开发吃掉运维?