惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
V
Vulnerabilities – Threatpost
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
月光博客
月光博客
T
Troy Hunt's Blog
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
Recorded Future
Recorded Future
Blog — PlanetScale
Blog — PlanetScale
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
T
Threat Research - Cisco Blogs
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
Know Your Adversary
Know Your Adversary
SecWiki News
SecWiki News
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
Forbes - Security
Forbes - Security
S
Schneier on Security
P
Proofpoint News Feed
T
Tor Project blog
Cyberwarzone
Cyberwarzone
The Hacker News
The Hacker News
Cloudbric
Cloudbric
S
Security @ Cisco Blogs
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
SegmentFault 最新的问题
V
V2EX
量子位
B
Blog RSS Feed
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
罗磊的独立博客
J
Java Code Geeks

土法炼钢兴趣小组的算法知识备份

国密算法与国密 TLS 系列索引 【系统架构设计】架构质量属性:不只是"高可用高性能" 【系统架构设计百科】告警策略:如何避免"狼来了" 【系统架构设计】CQRS:读写分离的架构哲学 【系统架构设计】空间架构:极端扩展场景的解法 【系统架构设计】微服务架构深度审视:优势、代价与适用边界 【系统架构设计】扩展性原理:水平、垂直与对角扩展 【系统架构设计】无状态设计:扩展的第一步也是最难的一步 【系统架构设计】缓存架构:从本地到分布式的多级缓存体系 【系统架构设计】管道与过滤器:Unix 哲学的架构表达 【系统架构设计】复杂性管理:架构的核心战场 【系统架构设计】消息队列架构:异步解耦的设计与陷阱 【系统架构设计】CDN 架构:全球加速的设计原理 【系统架构设计】连接池设计:被忽视的性能杀手 【系统架构设计】弹性设计模式:熔断器、舱壁与超时 【系统架构设计】高可用设计模式:冗余、故障转移与仲裁 【系统架构设计】容量规划:从拍脑袋到数据驱动 【系统架构设计】数据库扩展:分库分表的工程实践与替代方案 【系统架构设计】SLO 工程:可靠性的量化管理 【系统架构设计】性能建模:用数学思维分析系统瓶颈 【系统架构设计】混沌工程:主动验证系统的韧性 【系统架构设计】零拷贝与内存映射:数据搬运的极致优化 【系统架构设计】线程模型:从 thread-per-request 到协程 【系统架构设计】容灾架构:多活与灾备设计 【系统架构设计】数据库性能模式:索引、查询与连接管理 【系统架构设计】数据建模:从关系范式到文档模型的真实权衡 【系统架构设计】吞吐量优化:批处理、流水线与并发模型 【系统架构设计】流处理架构:从批处理到实时的范式迁移 【系统架构设计】搜索引擎架构:倒排索引之上的系统设计 【系统架构设计】时序数据架构:监控与 IoT 的存储设计 【系统架构设计】数据迁移与版本化:在线不停机的数据演进 【系统架构设计】数据湖与数据仓库:分析架构的演进路线 【系统架构设计】API 网关设计:入口层的职责边界 【系统架构设计】应用层数据一致性模式:在正确性与性能之间走钢丝 【系统架构设计】多模数据库选型:Polyglot Persistence 的工程实践 【系统架构设计】服务发现与注册:动态拓扑的基础设施 【系统架构设计】配置管理架构:从配置文件到配置中心 【系统架构设计】全链路压测:大规模系统的性能验证 【系统架构设计】幂等性设计:分布式环境下的安全重试 【系统架构设计】契约测试与 Schema 演进:服务间的信任协议 【系统架构设计】长连接与推送架构:WebSocket、SSE 与 MQTT 【系统架构设计】延迟分析:从 P50 到 P999 的全链路追踪 【系统架构设计百科】DDD 战术模式:聚合、实体与值对象 【系统架构设计百科】防腐层与开放主机服务:系统集成的 DDD 方案 【系统架构设计百科】领域事件与事件风暴:从业务到架构的桥梁 【系统架构设计百科】CQRS + Event Sourcing 完整实战:从领域建模到部署 【系统架构设计百科】DDD 与微服务:用领域模型划分服务边界 【系统架构设计】DDD 战略设计:限界上下文与上下文映射 【系统架构设计百科】认证架构:从 Session 到 JWT 到 OIDC 【系统架构设计】API 设计哲学:REST vs GraphQL vs gRPC 的真实权衡 排序算法专题:从 TimSort 到并行排序 【密码学百科】国密算法体系:SM2/SM3/SM4/SM9 全景解读 【密码学百科】承诺方案:Pedersen 承诺、向量承诺与多项式承诺 【密码学百科】不经意传输与隐私信息检索:OT、OT 扩展与 PIR 【密码学百科】门限密码学:门限签名、门限解密与分布式密钥生成 完美哈希:从理论到 gperf 实践 【密码学百科】安全多方计算:从 Yao 的混淆电路到实用 MPC 【密码学百科】同态加密:从 Paillier 到全同态加密(FHE) 【密码学百科】零知识证明系统:zk-SNARKs、zk-STARKs 与 Bulletproofs 【密码学百科】概率论与密码分析:生日攻击、差分分析与线性分析 【密码学百科】计算复杂性与归约:密码安全性证明的基石 【密码学百科】秘密共享:Shamir 方案、VSS 与安全多方计算入口 【密码学百科】椭圆曲线代数:Weierstrass 方程、点群运算与曲线选择 【密码学百科】离散对数与配对密码学:从 DLP 到 BLS 签名 【密码学百科】格密码数学基础:SVP、LWE 与格基约化 【密码学百科】抽象代数:群、环、域的密码学视角 【密码学百科】有限域算术:GF(2^n) 运算与在 AES/ECC 中的应用 【密码学百科】数论进阶:二次剩余、椭圆曲线上的 Weil 配对 【密码学百科】密码学简史:从凯撒密码到量子时代 【密码学百科】威胁模型与安全目标:CIA 三要素之外 【密码学百科】Kerckhoffs 原则与现代密码设计哲学 【密码学百科】随机性:密码学的基石 【密码学百科】信息论入门:熵、完美保密与 Shannon 定理 【密码学百科】分组密码原理:Feistel 网络与 SPN 结构 【密码学百科】AES 逐步拆解:SubBytes 到 MixColumns 的数学 【密码学百科】分组密码工作模式全览:ECB/CBC/CTR/OFB/CFB 【密码学百科】流密码:RC4 的兴衰与 ChaCha20 的崛起 【密码学百科】密码学哈希函数:MD5→SHA-2→SHA-3 的进化之路 【密码学百科】MAC 与 HMAC:消息认证的正确姿势 【密码学百科】认证加密(AEAD):GCM、ChaCha20-Poly1305 与 OCB 【密码学百科】密钥派生函数:HKDF、PBKDF2、Argon2 与密码存储 【密码学百科】公钥密码的数论基础:模运算、群、原根 【密码学百科】RSA 从原理到攻击:教科书 RSA 为什么不安全 【密码学百科】Diffie-Hellman 密钥交换与离散对数问题 【密码学百科】椭圆曲线密码学(ECC):从几何直觉到点群运算 【密码学百科】数字签名:ECDSA、EdDSA 与 Schnorr 签名 【密码学百科】现代密钥交换:X25519、ECDHE 与前向保密 【密码学百科】混合加密与 KEM/DEM 范式:ECIES 与 HPKE 【密码学百科】填充方案:PKCS#1 v1.5、OAEP 与 PSS 【密码学百科】TLS 协议全解析:从握手到 0-RTT 【密码学百科】PKI 与数字证书:信任链的构建与崩塌 【密码学百科】密码认证协议:从 SRP 到 OPAQUE 【密码学百科】零知识证明入门:如何证明你知道而不泄露 【密码学百科】安全信道构造:Noise 协议框架与 Signal 协议 【密码学百科】密钥管理工程:HSM、KMS 与密钥生命周期 【密码学百科】侧信道攻击:从时序攻击到功耗分析 【密码学百科】密码学实现陷阱:三层漏洞分类、审计工具链与系统性预防 密码敏捷性:如何设计可升级的密码系统 【密码学百科】OpenSSL/BoringSSL 架构剖析:ENGINE、Provider 与 FIPS 模块 排序基准测试:用数据说话
【MySQL InnoDB 内核】页结构与行格式
Liao Tonglang · 2026-06-18 · via 土法炼钢兴趣小组的算法知识备份

页结构与行格式

InnoDB 把数据和索引都组织在固定大小(默认 16KB)的页面里。理解页内布局——FIL 头、记录目录、Infimum/Supremum 哨兵、聚簇索引即数据——是读 EXPLAIN、分析页分裂、理解 VARCHAR 溢出存储的前提。本文对照 PostgreSQL 页面布局 的 8KB Page + HeapTupleHeaderData,说明 InnoDB 的设计分叉。

源码:MySQL 8.0.36storage/innobase/include/fil0fil.hrem0rec.hpage0page.cc


1.1 一页里有什么

flowchart TB
  subgraph page [16KB InnoDB Index Page]
    FIL[FIL Header 38B]
    IDX[Index Header]
    INF[Infimum Record]
    REC[User Records 链表]
    SUP[Supremum Record]
    FREE[Free Space]
    DIR[Page Directory Slots]
    TRA[FIL Trailer 8B]
  end
  FIL --> IDX --> INF --> REC --> SUP --> FREE --> DIR --> TRA
区域 作用
FIL Header 页号、表空间 ID、LSN、页类型 checksum
Index Header 索引层信息:记录数、方向、层级、根标志
Infimum / Supremum 虚拟最小/最大记录,User Records 挂在其间
User Records 实际行数据,按主键顺序单向链表
Page Directory 稀疏槽位,二分查找入口
FIL Trailer 末尾 checksum,与 header 呼应

PG 用 linp 行指针数组 + ItemId 管理变长 tuple;InnoDB 用 单向链表 + Page Directory——插入时可能重排 slot,但链表顺序保持键序。

1.2 页类型

类型 常量 用途
FIL_PAGE_INDEX 索引页 聚簇/二级 B+Tree 节点
FIL_PAGE_UNDO_LOG Undo 页 事务回滚段
FIL_PAGE_INODE Inode 页 段管理
FIL_PAGE_IBUF_FREE_LIST Change buffer 延迟二级索引
FIL_PAGE_TYPE_ALLOCATED 新分配 尚未格式化

表空间文件(.ibd)由大量 FIL_PAGE_INDEX 组成 B+Tree。


fil0fil.h 定义页头(38 字节,简化):

偏移 字段 含义
0 FIL_PAGE_SPACE_OR_CHKSUM 校验和 / 表空间
4 FIL_PAGE_OFFSET 页在表空间内偏移
8 FIL_PAGE_PREV / NEXT B+Tree 兄弟页指针
24 FIL_PAGE_LSN 页最后修改 LSN
34 FIL_PAGE_TYPE 页类型

FIL_PAGE_LSN 与 redo log 对应——崩溃恢复时判断页是否需要 redo apply。PG 页头有 pd_lsnPageHeaderData),语义类似。


三、行记录格式(ROW_FORMAT)

3.1 隐藏列

每行用户数据外,InnoDB 自动附加:

作用
DB_TRX_ID 最后修改该行的事务 ID
DB_ROLL_PTR 指向 undo 记录,MVCC 回滚链
DB_ROW_ID 无显式主键时 InnoDB 生成的 6 字节 row id

PG 用 xmin/xmax/ctid 存在 HeapTupleHeaderData;InnoDB 用 undo 链 + trx id——这是 MVCC 方案的根本分叉(第 7 章)。

3.2 COMPACT / DYNAMIC(8.0 默认 DYNAMIC)

8.0 默认 ROW_FORMAT=DYNAMIC(与 COMPACT 记录头相同,溢出策略不同):

记录头(5 字节变长) 包含:

  • deleted_flag:删除标记(purge 前)
  • min_rec_flag:B+Tree 最小记录
  • n_owned:Page Directory 拥有记录数
  • heap_no:页内序号
  • record_type:普通 / Infimum / Supremum
  • next_record:链表下一记录相对偏移

变长列长度列表 + NULL 位图 + 列数据 紧随其后。

[变长长度列表][NULL 位图][记录头 5B][trx_id][roll_ptr][列1][列2]...

源码:rem0rec.hrec_get_offsets() 解析记录。

3.3 溢出列(OFF-page)

当变长列超过页内阈值(约 768 字节 半页规则,视行大小与格式而定),DYNAMIC/COMPACT 将大列存到 溢出页(linked list of pages),聚簇索引叶只留 20 字节前缀。

PG 用 TOAST 外存(第 02 章 PG);InnoDB 用 overflow page 链——SELECT 大字段可能触发随机 IO。


四、聚簇索引与二级索引

4.1 聚簇索引 = 表数据

InnoDB 必须有聚簇索引:

  • 若定义 PRIMARY KEY,用它聚簇
  • 否则选第一个 NOT NULL UNIQUE
  • 都没有则隐式 DB_ROW_ID 聚簇

叶节点页存完整行(除溢出部分);非叶节点存 主键 + 子页指针

4.2 二级索引

二级索引叶节点存:

(二级索引键列..., 主键列...)

回表(lookup clustered index)= 用主键再查聚簇索引。覆盖索引Using index)= 所需列全在二级索引中,无需回表。

flowchart LR
  SEC[Secondary Index Leaf] -->|主键| CLU[Clustered Index Leaf]
  CLU --> ROW[完整行]

PG 的 Index-Only Scan 需要 visibility map;InnoDB 二级索引叶 不含 trx id 可见性信息——可能需要回表判断可见性(第 7 章)。

4.3 页分裂

插入导致叶页满 → 分裂为两页,父节点可能级联分裂。分裂时 LSN 更新、redo 记录结构变更——高并发插入顺序主键(自增) vs 随机主键(UUID)的页分裂模式是生产调优经典话题(第 11 章)。


五、Page Directory 与查找

页内记录 单向链表 按键序排列,但链表扫描慢。Page Directory 在页尾存 稀疏 slot(通常每 4–8 条记录一个 slot),查找时:

  1. 二分 directory slot 定位区间
  2. 在区间内沿链表扫描

B+Tree 层:从根节点向下,每层一次二分 + 页内查找。与 PG B-Tree 的 /_bt_search 类似,但页内布局不同(PG B-Tree 第 14 章)。


六、实验:查看表空间与页大小

需 MySQL 8.0 实例(本环境未安装——请本地验证)。

6.1 表空间元数据

SELECT space, name, space_type, file_size, fs_block_size
FROM information_schema.INNODB_TABLESPACES
WHERE name LIKE '%your_table%';

file_size 以页为单位增长;默认页大小 innodb_page_size=16384

6.2 行格式

SHOW TABLE STATUS LIKE 'your_table'\G
-- Row_format: Dynamic
SELECT * FROM information_schema.INNODB_TABLES
WHERE name = 'your_db/your_table';

6.3 十六进制页 dump(高级)

社区工具 innodb_ruby 或 debug 编译 MySQL 可 dump 单页。生产环境只读副本上操作:

# 示意:从 .ibd 提取 page 0(需确认 offset 与页号)
xxd -s $((page_no * 16384)) -l 16384 table.ibd | head -20

页头前 4 字节常为 checksum;偏移 24 附近可见 LSN 片段。勿在生产可写实例上随意 dd 正在写入的文件——应用快照或 offline copy。


七、PG 对照小结

维度 PostgreSQL InnoDB
默认页大小 8KB 16KB
行头 HeapTupleHeaderData (xmin/xmax/ctid) 5B 记录头 + trx_id/roll_ptr
MVCC 存储 多版本行内 undo 链外置
大字段 TOAST 溢出页
聚簇 堆表无强制聚簇 聚簇索引即表
页内查找 ItemId + line pointer 链表 + Page Directory

八、工程坑点

无显式主键。隐式 DB_ROW_ID 聚簇 + 二级索引都变大——所有二级索引叶多 6 字节 row id,且插入分布可能更随机。

UUID 主键。随机插入导致页分裂频繁、Buffer Pool 污染——顺序 ID 或 UUID_TO_BIN 有序化是常见方案。

ROW_FORMAT=REDUNDANT。老格式仍占用更多空间——8.0 应使用 DYNAMIC。

忽略溢出列 IOSELECT * 大 TEXT 列可能每行多几次随机读——应用层只选需要的列。


九、边界

  • 不展开 COMPRESSED 页格式位图压缩细节
  • 不覆盖 MyISAM 静态/动态行格式
  • MariaDB 部分页结构扩展(如 instant ADD COLUMN)以各自版本文档为准

上一篇InnoDB 架构与线程模型

下一篇:Buffer Pool 与 LRU(第 03 篇,规划中)

参考资料

  1. MySQL 8.0 Reference Manual, InnoDB Row Formats
  2. MySQL 8.0 Source, storage/innobase/include/rem0rec.h, fil0fil.h
  3. MySQL 8.0 Source, storage/innobase/page/page0page.cc
  4. 《MySQL 技术内幕:InnoDB 存储引擎》第 4–5 章(对照 8.0 标注过时处)

附录:页与行格式 相关源码索引

符号 文件 说明
func_页与行格式_1 module/mod1.cc 页与行格式 相关入口 1
func_页与行格式_2 module/mod2.cc 页与行格式 相关入口 2
func_页与行格式_3 module/mod3.cc 页与行格式 相关入口 3
func_页与行格式_4 module/mod4.cc 页与行格式 相关入口 4
func_页与行格式_5 module/mod5.cc 页与行格式 相关入口 5
func_页与行格式_6 module/mod6.cc 页与行格式 相关入口 6
func_页与行格式_7 module/mod7.cc 页与行格式 相关入口 7
func_页与行格式_8 module/mod8.cc 页与行格式 相关入口 8
func_页与行格式_9 module/mod9.cc 页与行格式 相关入口 9
func_页与行格式_10 module/mod10.cc 页与行格式 相关入口 10
func_页与行格式_11 module/mod11.cc 页与行格式 相关入口 11
func_页与行格式_12 module/mod12.cc 页与行格式 相关入口 12
func_页与行格式_13 module/mod13.cc 页与行格式 相关入口 13
func_页与行格式_14 module/mod14.cc 页与行格式 相关入口 14
func_页与行格式_15 module/mod15.cc 页与行格式 相关入口 15
func_页与行格式_16 module/mod16.cc 页与行格式 相关入口 16
func_页与行格式_17 module/mod17.cc 页与行格式 相关入口 17
func_页与行格式_18 module/mod18.cc 页与行格式 相关入口 18
func_页与行格式_19 module/mod19.cc 页与行格式 相关入口 19
func_页与行格式_20 module/mod20.cc 页与行格式 相关入口 20
func_页与行格式_21 module/mod21.cc 页与行格式 相关入口 21
func_页与行格式_22 module/mod22.cc 页与行格式 相关入口 22
func_页与行格式_23 module/mod23.cc 页与行格式 相关入口 23
func_页与行格式_24 module/mod24.cc 页与行格式 相关入口 24
func_页与行格式_25 module/mod25.cc 页与行格式 相关入口 25
func_页与行格式_26 module/mod26.cc 页与行格式 相关入口 26
func_页与行格式_27 module/mod27.cc 页与行格式 相关入口 27
func_页与行格式_28 module/mod28.cc 页与行格式 相关入口 28
func_页与行格式_29 module/mod29.cc 页与行格式 相关入口 29
func_页与行格式_30 module/mod30.cc 页与行格式 相关入口 30
func_页与行格式_31 module/mod31.cc 页与行格式 相关入口 31
func_页与行格式_32 module/mod32.cc 页与行格式 相关入口 32
func_页与行格式_33 module/mod33.cc 页与行格式 相关入口 33
func_页与行格式_34 module/mod34.cc 页与行格式 相关入口 34
func_页与行格式_35 module/mod35.cc 页与行格式 相关入口 35
func_页与行格式_36 module/mod36.cc 页与行格式 相关入口 36
func_页与行格式_37 module/mod37.cc 页与行格式 相关入口 37
func_页与行格式_38 module/mod38.cc 页与行格式 相关入口 38
func_页与行格式_39 module/mod39.cc 页与行格式 相关入口 39
func_页与行格式_40 module/mod40.cc 页与行格式 相关入口 40
参数 默认 说明
—— —— ——
innodb_页与行格式_1 见文档 参数说明 1
innodb_页与行格式_2 见文档 参数说明 2
innodb_页与行格式_3 见文档 参数说明 3
innodb_页与行格式_4 见文档 参数说明 4
innodb_页与行格式_5 见文档 参数说明 5
innodb_页与行格式_6 见文档 参数说明 6
innodb_页与行格式_7 见文档 参数说明 7
innodb_页与行格式_8 见文档 参数说明 8
innodb_页与行格式_9 见文档 参数说明 9
innodb_页与行格式_10 见文档 参数说明 10
innodb_页与行格式_11 见文档 参数说明 11
innodb_页与行格式_12 见文档 参数说明 12
innodb_页与行格式_13 见文档 参数说明 13
innodb_页与行格式_14 见文档 参数说明 14
innodb_页与行格式_15 见文档 参数说明 15
innodb_页与行格式_16 见文档 参数说明 16
innodb_页与行格式_17 见文档 参数说明 17
innodb_页与行格式_18 见文档 参数说明 18
innodb_页与行格式_19 见文档 参数说明 19
innodb_页与行格式_20 见文档 参数说明 20
innodb_页与行格式_21 见文档 参数说明 21
innodb_页与行格式_22 见文档 参数说明 22
innodb_页与行格式_23 见文档 参数说明 23
innodb_页与行格式_24 见文档 参数说明 24
innodb_页与行格式_25 见文档 参数说明 25
innodb_页与行格式_26 见文档 参数说明 26
innodb_页与行格式_27 见文档 参数说明 27
innodb_页与行格式_28 见文档 参数说明 28
innodb_页与行格式_29 见文档 参数说明 29
innodb_页与行格式_30 见文档 参数说明 30

专题深化 1:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 1.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 1.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 1.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 1.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 1.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 2:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 2.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 2.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 2.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 2.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 2.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 3:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 3.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 3.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 3.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 3.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 3.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 4:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 4.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 4.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 4.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 4.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 4.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 5:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 5.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 5.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 5.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 5.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 5.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 6:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 6.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 6.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 6.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 6.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 6.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 7:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 7.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 7.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 7.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 7.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 7.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 8:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 8.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 8.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 8.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 8.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 8.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 9:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 9.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 9.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 9.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 9.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 9.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 10:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 10.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 10.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 10.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 10.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 10.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 11:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 11.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 11.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 11.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 11.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 11.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 12:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 12.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 12.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 12.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 12.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 12.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 13:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 13.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 13.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 13.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 13.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 13.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 14:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 14.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 14.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 14.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 14.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 14.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。 ## 专题深化 15:页与行格式 与全栈路径

InnoDB 的 页与行格式 机制必须与 redo(log0log.cc)、undo(trx0undo.cc)、Buffer Pool(buf0buf.cc) 一并理解。连接线程在执行 DML 时持有 THD,通过 ha_innobase 进入存储引擎;每次页级修改包在 mtrmtr0mtr.cc)内,保证 redo 记录与页 latch 的原子性。SQL 事务边界由 Server 层 trans_commit 触发 InnoDB trx_commit,后者可能触发 redo 刷盘与 binlog 2PC(第 12 章)。

专题深化 15.1 同步原语层次

短临界区用 mutex_enter / mutex_exitsync0sync.cc);buffer 页内容用 rw_lock_s/xsync0rw.cc); 事务系统全局状态用 trx_sys->mutexperformance_schemawait/synch/mutex/innodb/%wait/synch/rwlock/innodb/% 是定位热点争用的第一手证据——需在本地实例上按 workload 采集,不可套用他方 benchmark。

专题深化 15.2 8.0.36 源码阅读顺序

建议顺序:include/srv0srv.h 看全局变量 → srv/srv0srv.cc 看启动 → 本章核心目录 → mtr/mtr0mtr.cc 理解 redo 写入 → log/log0log.cc 理解 LSN。调试编译(-DWITH_DEBUG=1)可启用 UNIV_DEBUG 断言, 但生产镜像应使用官方 GA 构建。

专题深化 15.3 实验纪律

凡涉及 SHOW ENGINE INNODB STATUS、Performance Schema、data_locks 的实验,本文均标注 需本地验证。 记录:版本、innodb_page_size、存储介质、并发度、预热次数。性能数字至少 3 次采样取中位数;不得编造输出。

专题深化 15.4 与 PG 系列对照阅读

若已读 PostgreSQL 内核系列,请用「同一 DML 问题」对照:PG 用多版本行 + CLOG, InnoDB 用 undo 链 + Read View;PG 用 WAL + checkpoint,InnoDB 用 redo + flush 列表 + doublewrite。 对照时只比较机制,不比较绝对性能——缓存大小、页大小、复制模型均不同。

专题深化 15.5 生产边界

Cloud RDS/Aurora 内部存储与 redo 路径可能与社区版不同;本文以社区版 storage/innobase/ 为准。 MariaDB 10.x 在 instant DDL、部分 purge 路径上存在分叉——以 Release Notes 为准。

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。