mycat设置sql隔离级别的问题

news/2024/11/17 4:47:05/

问题

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

该语句会引起两个问题,

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

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

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

在这里插入图片描述

排查

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

  1. Druid Datasource框架创建连接池

  2. Jdbc连接初始化过程

  3. MySql 版本间SQL语句差异

  4. MyCat工作原理

  5. Spring框架如何管理事物

Druid Datasource框架创建连接池

在这里插入图片描述

Jdbc连接初始化过程

在这里插入图片描述

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的情况:

在这里插入图片描述

直接连接MySql的情况:

在这里插入图片描述

Spring框架如何管理事物

注: Spring事物原理分析,可以参考该文章。 https://www.jianshu.com/p/ecf55d6f0118

修复

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

http://www.ppmy.cn/news/892718.html

相关文章

在Arduino集成开发环境下使用ESP32WIFI和蓝牙遇到的问题

问题描述:ESP32 WROOM 32E在使用WIFI或蓝牙时,出现串口监视器时不时断开、输出乱码,程序无法正常执行,WIFI连接困难等问题。 解决方法:电脑USB接口供电可能不够,换成手机充电器试试看

ESP32-WROOM-32E从零学习

自己做了一块板子,采用STM32F104RCT6为主控芯片,含液晶屏幕,可以通过ESP32-WROOM-32E接入WiFi网络中,显示些想要的内容。整体的使用还未想好,想先将各个模块调通,满足使用 。 目前想先将ESP32模块跟主芯片…

ESP32-C3系列模块 介绍

“ESP-C3-12F”模组Pin To Pin对标“ESP-12F/12E/12S/12L/07S/07”各模组, “ESP-C3-32S”模组Pin To Pin对标“ESP32-S及ESP32-WROOM-32/32D/32U/32E/32UE/32SE”各模组, “ESP-C3-13”模组Pin To Pin对标“ESP-13及ESP-WROOM-02/02D”各模组&#xf…

Intel64、IA-32、IA-64的关系

Intel 64 Intel 64指令集被应用于Pentium 4、Pentium D、Pentium Extreme Edition、Celeron D、Xeon、Intel Core 2及Intel Core i7处理器上。 概要 Intel 64计划的历史可谓相当长及复杂,其原因主要是因为Intel自身的内政问题。该计划开始时,其代号为Yam…

x86-64 intel64 AMD64 IA-32e x64汇编语言

概览 本文是X86-64汇编语言的简介,是写给使用GNU软件工具的编译器开发新手的。本文不是对体系结构的详尽描述,但它足以为您熟悉官方手册以及编写大部分本科课程的C编译器后端提供指导。X86-64是对X86 32-bit体系结构的64-bit扩展的通称。X64, AMD64, In…

IA-32e模式

64位下的CS段描述符 L:如果是64位模式,该标志位1 64位下强制平坦模式(FS和GS除外),段描述符不再描述段的基址和LIMIT。 应用程序的CS23 32位 CS33 64位 WINDBG下使用dg偏移来解析段描述符 TSS段描述符 TSS在64位下是…

IA-32(Intel Architecture 32位)寄存器

IA-32 寄存器类型 Basic program execution registers x87 FPU registers MMX registers XMM registers Control registers Memory management registers Debug registers Memory management registers Debug registers Memory type range registers Machine specific register…

fast lio测试

fast lio2代码编译及运行 编译 fast lio2仓库地址 一. 安装依赖 ubuntu18ros环境下,pcl和eigen可默认使用ros自带版本,所以只需安装 livox驱动包 livox_ros_driver即可 安装livox驱动(github.com/Livox-SDK/livox_ros_driver),需要先安装驱动依赖的S…