码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL——(三大日志)(MVCC)(间隙锁与其他各种锁)


    三大日志

    一个SQL执行的时候,会在buffer pool里面做哪些操作

    undo log 在对数据执行操作之前就进行了记录
    undo log主要记录了数据的逻辑变化,比如一条INSERT语句,对应一条DELETE的undo log,对于每个UPDATE语句,对应一条相反的UPDATE的undo log,这样在发生错误时,就能回滚到事务之前的数据状态。

    redo log 是属于InnoDB引擎的,binlog是属于MySQL数据库的
    redo log是物理日志,记录的是“在某个数据页上做了什么修改”(数据页上某个偏移量的值);

    binlog是逻辑日志,记录的是这个语句的原始逻辑(sql、数据行)
    redo log是循环写入的,当空间不足的时候,就会覆盖之前的数据,而binlog是追加方式写入,一块区域写满了,就会新开一个

    MVCC

    MVCC与undolog
    正确的理解MySQL的MVCC及实现原理
    undolog多版本链+ReadView机制实现mvcc多版本并发控制

    InnoDB存储引擎在 RR 级别下通过 MVCC和 Next-key Lock 来解决幻读问题:
    1、执行普通 select,此时会以 MVCC 快照读的方式读取数据
    在快照读的情况下,RR 隔离级别只会在事务开启后的第一次查询生成 Read View ,并使用至事务提交。所以在生成 Read View 之后其它事务所做的更新、插入记录版本对当前事务并不可见,实现了可重复读和防止快照读下的 “幻读”

    2、执行 select…for update/lock in share mode、insert、update、delete 等当前读
    在当前读下,读取的都是最新的数据,如果其它事务有插入新的记录,并且刚好在当前事务查询范围内,就会产生幻读!InnoDB 使用 Next-key Lock 来防止这种情况。当执行当前读时,会锁定读取到的记录的同时,锁定它们的间隙,防止其它事务在查询范围内插入数据。只要我不让你插入,就不会发生幻读

    间隙锁

    MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解 - 简书 (jianshu.com)
    心灵拷问:MySQL 到底是怎么加行级锁、间隙锁、临键锁的?

    假设有如下表:
    InnoDB,RR隔离级别:id主键, age 普通索引
    3.jpg
    该表中 age 列潜在的临键锁有:
    (-∞, 10],
    (10, 24],
    (24, 32],
    (32, 45],
    (45, +∞],
    在事务 A 中执行如下命令:
    – 根据非唯一索引列 UPDATE 某条记录
    UPDATE table SET name = Vladimir WHERE age = 24;
    – 或根据非唯一索引列 锁住某条记录
    SELECT * FROM table WHERE age = 24 FOR UPDATE;
    不管执行了上述 SQL 中的哪一句,之后如果在事务 B 中执行以下命令,则该命令会被阻塞:
    INSERT INTO table VALUES(100, 26, ‘tianqi’);
    很明显,事务 A 在对 age 为 24 的列进行 UPDATE 操作的同时,也获取了 (24, 32] 这个区间内的临键锁。

  • 相关阅读:
    象群游牧优化算法(EHO)(Matlab完整代码实现)
    常用工具使用
    [管理与领导-110]:IT人看清职场中的隐性规则 - 7 - 十二条职场真相
    5.0 CRC32校验技术概述
    Leetcode1462-课程表 IV
    多线程---线程安全问题及解决
    【博客479】prometheus-----时序数据模型及其存储机制
    怎么压缩word文档的大小?
    cisp-pts学习笔记-sql注入
    【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)
  • 原文地址:https://blog.csdn.net/m0_67290880/article/details/127097596
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号