mycat设置sql隔离级别的问题

这篇具有很好参考价值的文章主要介绍了mycat设置sql隔离级别的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。

该语句会引起两个问题,

1: "REPEATABLE READ"不是我们预期的事物隔离级别。

2: 大量无效的SQL影响性能。

注: MySql的可重复读会带来怎样的问题,可以参考该文章。https://www.jianshu.com/p/f7360d259878

mycat设置sql隔离级别的问题,mycat,sql,mycat

排查

排查过程涉及到以下几个方面:

  1. Druid Datasource框架创建连接池

  2. Jdbc连接初始化过程

  3. MySql 版本间SQL语句差异

  4. MyCat工作原理

  5. Spring框架如何管理事物

Druid Datasource框架创建连接池

mycat设置sql隔离级别的问题,mycat,sql,mycat

Jdbc连接初始化过程

mycat设置sql隔离级别的问题,mycat,sql,mycat

MySql 版本间SQL语句差异

由上图可以见,对于具体发送哪一条SQL语句去向MySql服务端请求事物隔离级别由版本决定的。MySql的版本5.7.20是一个分界线。

对于小于5.7.20的MySql版本使用的是“select @@session.tx_isolation”。

对于大于5.7.20的MySql版本使用的是“select @@session.transaction_isolation”

MyCat工作原理

mycat 在server.xml中设置隔离级别为RC,mysql级别设置隔离级别为RC。

但是,连接mycat,通过 “select @@session.tx_isolation” 查出来的隔离级别是RR。

通过 “select @@session.transaction_isolation” 查出来的隔离级别是RC。

如下两图所示,

连接MyCat的情况:

mycat设置sql隔离级别的问题,mycat,sql,mycat

直接连接MySql的情况:

mycat设置sql隔离级别的问题,mycat,sql,mycat

Spring框架如何管理事物

注: Spring事物原理分析,可以参考该文章。 https://www.jianshu.com/p/ecf55d6f0118文章来源地址https://www.toymoban.com/news/detail-571889.html

修复

  1. 使用本地事物级别代替向服务端发送请求询问隔离级别(“&useLocalSessionState=true”,驱动程序是否应引用autocommit的内部值,以及由Connection.setAutoCommit()和Connection.setTransactionIsolation()设置的事务隔离)
  2. MyCat使用参数 “5.7.20” 向客户端返回正确的版本信息。用来消除版本之间SQL的细微差别。

到了这里,关于mycat设置sql隔离级别的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】事务及其隔离性/隔离级别

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、事务的概念 1、事务的四种特性 2、事务的作用 3、存储引擎对事务的支持 4、事务的提交方式 二、事务的启动、回

    2024年02月12日
    浏览(47)
  • Spring的事务隔离级别

    Spring的事务隔离级别是用于控制事务并发访问数据库时的行为。Spring框架提供了五个事务隔离级别,分别是: 1. DEFAULT(默认):使用数据库默认的事务隔离级别。在大多数情况下,这等同于使用READ_COMMITTED级别。 2. READ_UNCOMMITTED(读取未提交数据):最低的隔离级别,允许一

    2024年02月09日
    浏览(41)
  • 事务和事务的隔离级别

    1.4.1.为什么需要事务 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要不全部成功,要不全部不成功。 A 给B 要划钱,A 的账户-1000元, B 的账户就要+1000元,这两个up

    2024年02月13日
    浏览(42)
  • Mysql 索引 、事务、隔离级别

    目录 索引(index) 1.为什么要有索引? 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引是一种为了加快数据库查询(操作)速度而引入的一种手段,需要占用额

    2024年01月20日
    浏览(59)
  • 详解MySQL事务隔离级别

    一个事务具有 ACID 特性,也就是(Atomicity、Consistency、Isolation、Durability,即 原子性 、 一致性 、 隔离性 、 持久性 ),本文主要讲解一下其中的 Isolation ,也就是事务的 隔离性 。 概述 四种隔离级别分别是: 读未提交(Read Uncommitted) :最低的隔离级别,事务对数据的修改即使

    2024年02月09日
    浏览(50)
  • 【MYSQL】事务隔离级别

    脏读 一个事务正在对一条记录做修改,在这个事务完成并提交前,另一个事务也来读取同一条记录,读取了这些未提交的“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象的叫作’脏读’(Dirty Reads)。 例子:事务A修改了一条数据1状态

    2024年01月19日
    浏览(40)
  • MySQL的事务隔离级别

    目录 事务隔离级别的概念 脏读(Dirty Read): 不可重复读(Non-Repeatable Read): 幻读(Phantom Read): 读未提交(Read Uncommitted) 读未提交隔离级别的特点 示例 优势和劣势 读已提交(Read Committed) 读已提交隔离级别的特点 示例 优势和劣势 可重复读(Repeatable Read) 可重复读隔

    2024年02月09日
    浏览(48)
  • Spring事务隔离级别

    Spring事务隔离级别共有五种:DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATBLE_READ、SERIALIZABLE。下面对这五个级别进行简单的介绍。 1 DEFAULT Spring中 默认 的事务隔离级别。以连接的数据库的事务隔离级别为准。 2 READ_UNCOMMITTED Spring事务 最弱 的隔离级别。一个事务可以读取到另一个

    2024年02月09日
    浏览(43)
  • 数据库事务隔离级别

    读未提交、读已提交、可重复读、串行化 对事务中所有读写的数据加上读锁、写锁、范围锁。所以冲突的事务必须同步执行。 核心是只对事务中所有读写的数据加上读锁、写锁,不加范围锁。 相比于读已提交,由于对整个事务都加上了读锁,避免其他事务可以进行更新,进

    2024年02月08日
    浏览(42)
  • 探索MySQL隔离级别

    数据库事务的隔离级别是一个重要的概念,它定义了一个事务可能受其他并发事务影响的程度。MySQL提供了四种标准的隔离级别,每个级别都以不同的方式平衡了一致性和性能。本文将详细介绍这些隔离级别,并提供相应的示例。 概念: 这是最低的隔离级别,允许一个事务可

    2024年02月02日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包