MySQL InnoDB 的双写策略

双写的作用MySQL InnoDB 存储引擎中的双写策略(Doublewrite Buffer)是为了防止在将内存中的数据页(Page)写入磁盘时发生部分写失效(Partial Page Write / Torn Page)导致的数据损坏问题,从而提高数据在意外宕机(如操作系统崩溃、断电)后的恢复能力和数据一致性。 问题背景:部分写失效 (Partial Page Write)
阅读全文

MySQL幻读与间隙锁(Gap Lock)解析指南

MySQL间隙锁(Gap Lock)解析指南 1. 间隙锁的本质与设计哲学间隙锁(Gap Lock)是InnoDB存储引擎独特的锁机制,它不锁定记录本身,而是锁定记录之间的"空白区域"。这一设计思想源于数据库系统对并发控制的不断探索,反映了数据库设计者对"读写"冲突的深刻理解。从数据结构的角度看,间隙锁实际上锁定的是B+树索引中节点之间的范围,这种锁定方式与传统行锁的最大
阅读全文

Go语言之防缓存击穿利器 Singleflight

Go语言之防缓存击穿利器 Singleflight 1. 缓存击穿在日常开发中,为了提升性能和减轻数据库的压力,通常会对热点数据进行缓存。例如,使用 Redis 缓存用户请求的数据,如果缓存中有数据则直接返回,否则查询数据库并将结果写入缓存。但是,如果缓存失效了,在查询数据库和将数据再次写入缓存的过程中,其他请求也会出现缓存未命中的情况,导致大量请求直接打到数据库,给数据
阅读全文

MySQL的底层原理与索引结构选择

MySQL的底层原理与索引结构选择MySQL是一种流行的开源关系型数据库管理系统,它的设计和实现包含了许多复杂的底层原理。在这些原理中,索引结构的选择对于数据库性能有着至关重要的影响。本文将详细介绍MySQL的底层原理,并解释为什么MySQL的索引结构默认使用B+Tree,而不是其他如BTree、Hash、二叉树或红黑树。 MySQL的底层原理MySQL的架构可以分为几个
阅读全文

MySQL的Redo Log、Undo Log和Binlog详解

MySQL的Redo Log、Undo Log和Binlog详解在MySQL数据库系统中,Redo Log、Undo Log和Binlog是三个关键的日志组件,它们在保证数据一致性和支持数据复制等方面发挥着重要作用。下面我们将详细介绍这三个概念的原理、应用场景以及它们之间的区别。 Redo Log(重做日志) 概念Redo Log是InnoDB存储引擎特有的一种日志,
阅读全文

MVVC多版本并发控制

MVCC 概念MVCC(多版本并发控制)是一种并发控制的方法,它对每一个读取的对象都生成一个“读时间点”的数据快照。“不同的事务可以在同一时间看到同一张表中的不同数据”在MySQL InnoDB存储引擎中,MVCC的实现通过在每一行记录后面保存两个字段来完成,这两个字段分别是:创建版本号(CREATE VERSION NUMBER,CVN)删除版本号(DELETE V
阅读全文

MySQL数据库的4种隔离级别

当用户并发访问数据库时,如果数据库系统对并发操作未控制好,可能会产生一些问题,如:脏读、幻读、不可重复读。为了解决这些问题,SQL标准定义了四种事务隔离级别,不同的隔离级别对并发操作的限制也就不同。
阅读全文

MySQL慢查分析

慢查询表现特征,如何运用好慢查询日志、性能分析工具、SQL 优化等方法进行分析和处理,处理好慢查询可显著提升我们程序的运行速度
阅读全文

MySQL分库分表

数据表写到两千万条数据之后,底层 B+ 树的层级结构就可能会变高,不同层级的数据页一般都放在磁盘里不同的地方,磁盘 IO 就会增多,查询性能就会变差。这个时候我们就会考虑分库分表。分表分为水平分表和垂直分表。而分库则是将一个库的数据拆分到多个相同的库中,访问的时候访问一个库
阅读全文