首页 > 数据库 >mysql 为什么很多互联网公司选择了读可提交

mysql 为什么很多互联网公司选择了读可提交

时间:2024-08-04 23:06:42浏览次数:9  
标签:语句 binlog 那么 互联网 提交 mysql 服务器

前言

在默认环境下,mysql 是可重复读,为什么默认可重复读呢?

一般情况下感觉读可提交就行,可重复读解决幻读的问题,但是大多情况下没有幻读的问题,所以也没有必要可重复读。

那么为什么mysql 要把默认配置设置为可重复读呢?

正文

历史原因:

这种图,如果是在可提交读的情况下,会发生什么呢?

当运行完后,那么进行查询:

那么在从库运行,那么就是:

为什么会这样呢?因为binlog 记录的是提交顺序:首先session B 先提交的,那么从库运行的时候就会出现sessionB的语句再运行sessionA的语句。

这样就造成了主从数据不一致的问题。

那么这个问题是否能解决呢?如果这个问题不解决,那么可提交读这个是否就没法做主从了。

这就不得不提及一下binary log,简称bin log了。

现在bin log 有三种格式:

  1. statement

  2. row

  3. mixed

  4. Statement-based replication (SBR): 在SBR中,MySQL服务器将每个执行的SQL语句记录到binlog中。当从主服务器复制到从服务器时,从服务器会执行相同的SQL语句来保持数据同步。这种方法简单且高效,但可能会导致一些复制不一致的问题。

  5. Row-based replication (RBR): 在RBR中,MySQL服务器将每次数据更改的行的副本记录到binlog中。当从主服务器复制到从服务器时,从服务器会根据这些行的副本来进行相同的数据更改。这种方法可以确保数据一致性,但会增加binlog的大小。

  6. Mixed-based replication (MBR): MBR结合了SBR和RBR的优点。MySQL服务器根据情况选择使用SBR或RBR来记录binlog。通常对于不同类型的SQL语句会采用不同的复制方式,以达到效率和数据一致性的平衡。

之所以产生问题呢? 那么就是由于第一种,因为保存的是sql 语句,那么执行的就是sql语句了,顺序不同,那么结果就不同了。

那么要解决这个问题呢? 可以使用row这种模式,这种模式就是将数据的结果写下来,那么同步过去也就是从新同步数据了,也就是同步结果,这个时候就没有问题。

那么这个时候应该也是有更多的开销的,因为row要把结果记录下了,那么肯定是需要更多的磁盘io和磁盘空间了。

但是互联网公司依然选择读提交的原因是什么呢?

  1. 原因一就是间隙锁的问题,因为存在间隙锁,那么死锁概率就大,同样的间隙锁的原因,锁的范围就大了。

  2. 再rr隔离级别下面,没有命中的索引会锁表:

update test set color = 'blue' where color = 'white'; 

试想一下update 要避免color = 'white' 被插入,这个时候只能锁表了。

而读提交,那么就只会锁住两行:

主要的原因是因为读提交的锁范围,并发高,然后需要可重复读场景中的解决幻读问题的比较少。

下一节mvcc。

标签:语句,binlog,那么,互联网,提交,mysql,服务器
From: https://www.cnblogs.com/aoximin/p/18342380

相关文章

  • 基于Java swing+Mysql实现的超市管理与购物系统,使用了beautyEye_inf.jar美化界面
    一、需求分析1.1需求分析超市管理与购物系统......
  • 基于Java swing + MySQL电影院订票与管理系统,分为客户端和服务端
    一、需求分析电影院购票与管理系统......
  • Spring Cloud微服务项目集成MySQL
            在现代微服务架构中,数据持久化是至关重要的一环。SpringCloud是一个广泛使用的微服务框架,它提供了一整套解决方案来简化微服务的开发和管理。而MySQL作为一个开源的关系型数据库系统,在微服务项目中也发挥着重要作用。本文博主将介绍如何在SpringCloud微服务......
  • 深入探讨MySQL索引的设计原则及优化策略
    深入探讨MySQL索引的设计原则及优化策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在数据库系统中,索引是提升查询性能的关键工具。合理的索引设计可以显著提高数据访问的速度,而不当的索引配置则可能导致性能问题。本文将深入探讨MySQL索引的设计......
  • MySQL基础知识分享(二)
    写在前面大家好,不知道前面的20题大家写的怎么样,前面分享的20题是SQL中查询的基础题型,这部分被称为DQL部分,是每个学习MySQL必须要学会的部分,下面就让我来介绍MySQL中的TCL部分,也就是事务部分。ACID四大特性事务的概述事务的ACID特性可以确保银行不会弄丢你的钱。而在应用逻辑中......
  • mysql 两种重要的日志
    前言这个不用多说,两种重要的日志分别是redolog和binlog,这两种,下面分别来结束。正文先来redolog,redolog是innodb引擎特有的,运用了一种wal技术,全称是:write-aheadlogging.它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。简单来说就是先写内存......
  • navicat-mysql重置密码
    目录navicat-mysql重置密码1.Mysql8.0以下2.navicatformysql出现如下问题1.问题描述2.查看用户信息3.问题原因4.解决问题navicat-mysql重置密码1.Mysql8.0以下搜索命令提示符,以管理员身份进入。输入scquerymysql找到Mysql服务名称,然后输入netsotpmysql80(这个是sc......
  • mysql常用的查询
    mysql常用的查询建表末尾必加上ENGINE=InnoDBDEFAULTCHARSET=utf8跨表一列比较,多列查询SELECTsno,cno,rankfromscoreJOINgradeonscore.degree>low&&score.degree<upp;模糊查询,字符转化的筛选查询,分组统计查询SELECTcnofromscoreWHERECAST(cnoASchar)L......
  • 详细教程 MySQL 数据库 下载 安装 连接 环境配置 全面
    数据库就是储存和管理数据的仓库,对数据进行增删改查操作,其本质是一个软件。首先数据有两种,一种是关系型数据库,另一种是非关系型数据库。关系型数据库是以表的形式来存储数据,表和表之间可以有很多复杂的关系,比如:MySQL、Oracle、SQLServer等;非关系型数据库是以数据集的形式存......
  • 基于Java的少儿托管系统的设计与实现/毕业项目/课程设计/MySQL
     基于Java的少儿托管系统的设计与实现摘  要随着互联网技术的快速发展,无论是人们的生活还是工作,互联网技术都带来了很多的方便,人们通过互联网技术不仅能够提高工作效率还能够降低出错的几率。随着人们工作的忙碌,越来越多的家长选择放学后对孩子进行托管,但托管机构的......