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+树索引中节点之间的范围,这种锁定方式与传统行锁的最大
阅读全文

MySQL数据库事务和ACID特性

MySQL数据库事务和ACID特性 1. 概述本文将深入探讨数据库事务和ACID(原子性、一致性、隔离性、持久性)特性,并详细解释MySQL是如何实现这些特性的。结论: 一致性(Consistency)是最终目标; 原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)是实现一致性的手段。MySQL通过以下方式实现ACI
阅读全文

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存储引擎特有的一种日志,
阅读全文

GORM(一)入门之CURD

GORM 是一个强大的 ORM 库,它为 Go 开发者提供了一个简单而有效的方式来与数据库交互,全功能 ORM、预加载、Context、预编译、批量插入等各种特性1. GORM 的安装流程要在 Go 项目中使用 GORM,我们首先需要安装这个包。以下是基本的安装流程: 首先,确保你安装了 Go,并设置了GOPATH。然后使用以下命令安装 GORM:```shellgo get
阅读全文

MVVC多版本并发控制

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

MySQL数据库的4种隔离级别

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

MySQL慢查分析

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

MySQL分库分表

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