MySQL事务redo和undo日志

事务有 4 种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由锁机制实现。 事务的原子性、一致性和持久性由事务的 redo 日志和 undo 日志来保证。 redo log 称为重做日志,提供再写入操作,恢复提交事务修改的页操作(我们对数据进行修改,数据会报存在内存中,此时还没有保存在磁盘当中,如果此时由于不可抗因素如宕机,事务将不能保证持久性。而 redo log 就阔以保证了,我们在修改完数据之后,将相关的数据保存到 redo log 中,就算出现宕机我们也可以把更新过的数据从 redo log 中进行恢复刷新到磁盘中),用来保证事务 ...

MySQL B+树深度的了解

https://zhuanlan.zhihu.com/p/444448405 以下从 B+树深度简单模拟计算,有两个主要特征决定了 B 树(或 B+ 树)的深度。 数据库中的行数。我们将其称为 N。 索引键的大小。让我们称 B 为适合 B 树节点的键数。(有时 B 用于指代节点大小本身,而不是它持有的键数,但我希望这样看起来更直观。) 给定这些数量,B 树的深度是 log B 为下标 N。那只是 (log N )/log B。现在我们可以注意到小键意味着更大的 B,这会减少 (log N )/log B。如果我们将键的字节大小减半,那么 B 树的深度将从 (log ...

MySQL表碎片

原文链接:https://www.percona.com/blog/2020/06/24/mysql-table-fragmentation-beware-of-bulk-insert-with-failure-or-rollback/ 当心批量插入失败或者回滚时带来的 MySQL 表碎片,通常,DBA 都了解使用 DELETE 语句会产生表碎片。在大多数情况下,当执行大量的删除时,DBA 总会重新构建表以回收磁盘空间。但是,您是否认为只有删除才会导致表碎片?(答案:并不是)。在这篇博文中,我将解释插入如何会带来碎片。 在讨论这个主题之前,我们需要了解 MySQL,有两种碎片: 在表中的 ...

MVCC多版本并发控制

https://cloud.tencent.com/developer/article/1488871https://zhuanlan.zhihu.com/p/40208895https://blog.csdn.net/u014532775/article/details/107018538https://www.jianshu.com/p/0ef46997c300 https://blog.csdn.net/fuzhongmin05/article/details/91351933redolog 和 undologhttps://www.cnblogs.com/f-ck-need-u/arc ...

InnoDB中的页合并与分裂

原文链接:https://www.percona.com/blog/2017/04/10/innodb-page-merging-and-page-splitting/https://www.percona.com/blog/2020/06/24/mysql-table-fragmentation-beware-of-bulk-insert-with-failure-or-rollback/ 如果您遇到了全球(为数不多的)MySQL 顾问之一并要求他/她审查您的查询和/或模式,我相信他/她会告诉您有关良好主键设计的重要性的一些信息. 特别是在 InnoDB 的情况 ...

MySQL死锁分析

背景以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁。借着这个机会又重新学习了一下 mysql 的死锁知识以及常见的死锁场景。在多方调研以及和同事们的讨论下终于发现了这个死锁问题的成因,收获颇多。虽然是后端程序员,我们不需要像 DBA 一样深入地去分析与锁相关的源码,但是如果我们能够掌握基本的死锁排查方法,对我们的日常开发还是大有裨益的。 PS:本文不会介绍死锁的基本知识,mysql 的加锁原理可以参考本文的参考资料提供的链接。 死锁起因先介绍一下数据库和表情况,因为涉及到公司内部真是的数据,所以以下都做了模拟,不会影响具体的分析。 我们采用 ...

MySQL事务和隔离级别

1、数据库事务 ACID 特性数据库事务的 4 个特性: 原子性(Atomicity) 事务中的多个操作,不可分割,要么都成功,要么都失败,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 隔离性(Isolation) 多个事务 ...