MySQL 技术内幕:InnoDB 存储引擎
MySQL 技术内幕
编辑推荐
畅销书全新升级,第 1 版广获好评;资深 MySQL 专家撰写,全球知名 MySQL 数据库服务提供商 Percona 公司 CTO 作序推荐,国内多位数据库专家联袂推荐基于 MySQL 5.6,结合源代码,从存储引擎内核角度对 InnoDB 的整体架构、核心实现和工作机制进行深入剖析
内容简介
《MySQL 技术内幕:InnoDB 存储引擎》由国内资深 MySQL 专家亲自执笔,国内外多位数据库专家联袂推荐。作为国内一本关于 InnoDB 的专著,本书的第 1 版广受好评,第 2 版不仅针对全新的 MySQL 5.6 对相关内容进行了全面的补充,还根据广大读者的反馈意见对第 1 版中存在的不足进行了完善,全书大约重写了 50%的内容。本书从源代码的角度深度解析了 InnoDB 的体系结构、实现原理、工作机制,并给出了大量实践,能帮助你系统而深入地掌握 InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供专业的指导。
《MySQL 技术内幕:InnoDB 存储引擎》一共 10 章,首先宏观地介绍了 MySQL 的体系结构和各种常见的存储引擎以及它们之间的比较;接着以 InnoDB 的内部实现为切入点,逐一详细讲解了 InnoDB 存储引擎内部的各个功能模块的实现原理,包括 InnoDB 存储引擎的体系结构、内存中的数据结构、基于 InnoDB 存储引擎的表和页的物理存储、索引与算法、文件、锁、事务、备份与恢复,以及 InnoDB 的性能调优等重要的知识;最后对 InnoDB 存储引擎源代码的编译和调试做了介绍,对大家阅读和理解 InnoDB 的源代码有重要的指导意义。
本书适合所有希望构建和管理高性能、高可用性的 MySQL 数据库系统的开发者和 DBA 阅读。
作者简介
姜承尧(David Jiang),资深 MySQL 数据库专家,擅长于数据库的故障诊断、性能调优、容灾处理、高可用和高扩展研究,同时一直致力于 MySQL 数据库底层实现原理的研究和探索。此外,对高性能数据库和数据仓库也有深刻而独到的理解。曾为 MySQL 编写了许多开源工具和性能扩展补丁,如广受好评的 InnoDB 引擎二级缓存项目。现任网易杭州研究院技术经理一职,负责 MySQL 数据库的内核开发,参与设计与开发 MySQL 数据库在网易云环境中的应用。曾担任久游网数据库工程部经理,曾领导并参与了多个大型核心数据库的设计、实施、管理和维护,实战经验非常丰富。活跃于开源数据库以及开源软件领域,是著名开源社区 ChinaUnix MySQL 版块的版主,热衷于与网友分享自己的心得和体会,深受社区欢迎。
除本书外,他还撰写了《MySQL 技术内幕:SQL 编程》,是本书的姊妹篇,颇受好评。
目录
第 1 章 MySQL 体系结构和存储引擎
- 1.1 定义数据库和实例
- 1.2 MySQL 体系结构
- 1.3 MySQL 存储引擎
- 1.3.1 InnoDB 存储引擎
- 1.3.2 MyISAM 存储引擎
- 1.3.3 NDB 存储引擎
- 1.3.4 Memory 存储引擎
- 1.3.5 Archive 存储引擎
- 1.3.6 Federated 存储引擎
- 1.3.7 Maria 存储引擎
- 1.3.8 其他存储引擎
- 1.4 各存储引擎之间的比较
- 1.5 连接 MySQL
- 1.5.1 TCP/IP
- 1.5.2 命名管道和共享内存
- 1.5.3 UNIX 域套接字
- 1.6 小结
第 2 章 InnoDB 存储引擎
- 2.1 InnoDB 存储引擎概述
- 2.2 InnoDB 存储引擎的版本
- 2.3 InnoDB 体系架构
- 2.3.1 后台线程
- 2.3.2 内存
- 2.4 Checkpoint 技术
- 2.5 Master Thread 工作方式
- 2.5.1 InnoDB 1.0.x 版本之前的 Master Thread
- 2.5.2 InnoDB1.2.x 版本之前的 Master Thread
- 2.5.3 InnoDB1.2.x 版本的 Master Thread
- 2.6 InnoDB 关键特性
- 2.6.1 插入缓冲
- 2.6.2 两次写
- 2.6.3 自适应哈希索引
- 2.6.4 异步 IO
- 2.6.5 刷新邻接页
- 2.7 启动、关闭与恢复
- 2.8 小结
第 3 章 文件
- 3.1 参数文件
- 3.1.1 什么是参数
- 3.1.2 参数类型
- 3.2 日志文件
- 3.2.1 错误日志
- 3.2.2 慢查询日志
- 3.2.3 查询日志
- 3.2.4 二进制日志
- 3.3 套接字文件
- 3.4 pid 文件
- 3.5 表结构定义文件
- 3.6 InnoDB 存储引擎文件
- 3.6.1 表空间文件
- 3.6.2 重做日志文件
- 3.7 小结
第 4 章 表
- 4.1 索引组织表
- 4.2 InnoDB 逻辑存储结构
- 4.2.1 表空间
- 4.2.2 段
- 4.2.3 区
- 4.2.4 页
- 4.2.5 行
- 4.3 InnoDB 行记录格式
- 4.3.1 Compact 行记录格式
- 4.3.2 Redundant 行记录格式
- 4.3.3 行溢出数据
- 4.3.4 Compressed 和 Dynamic 行记录格式
- 4.3.5 CHAR 的行结构存储
- 4.4 InnoDB 数据页结构
- 4.4.1 File Header
- 4.4.2 Page Header
- 4.4.3 Infimum 和 Supremum Records
- 4.4.4 User Records 和 Free Space
- 4.4.5 Page Directory
- 4.4.6 File Trailer
- 4.4.7 InnoDB 数据页结构示例分析
- 4.5 Named File Formats 机制
- 4.6 约束
- 4.6.1 数据完整性
- 4.6.2 约束的创建和查找
- 4.6.3 约束和索引的区别
- 4.6.4 对错误数据的约束
- 4.6.5 ENUM 和 SET 约束
- 4.6.6 触发器与约束
- 4.6.7 外键约束
- 4.7 视图
- 4.7.1 视图的作用
- 4.7.2 物化视图
- 4.8 分区表
- 4.8.1 分区概述
- 4.8.2 分区类型
- 4.8.3 子分区
- 4.8.4 分区中的 NULL 值
- 4.8.5 分区和性能
- 4.8.6 在表和分区间交换数据
- 4.9 小结
第 5 章 索引与算法
- 5.1 InnoDB 存储引擎索引概述
- 5.2 数据结构与算法
- 5.2.1 二分查找法
- 5.2.2 二叉查找树和平衡二叉树
- 5.3 B+ 树
- 5.3.1 B+ 树的插入操作
- 5.3.2 B+ 树的删除操作
- 5.4 B+ 树索引
- 5.4.1 聚集索引
- 5.4.2 辅助索引
- 5.4.3 B+ 树索引的分裂
- 5.4.4 B+ 树索引的管理
- 5.5 Cardinality 值
- 5.5.1 什么是 Cardinality
- 5.5.2 InnoDB 存储引擎的 Cardinality 统计
- 5.6 B+ 树索引的使用
- 5.6.1 不同应用中 B+ 树索引的使用
- 5.6.2 联合索引
- 5.6.3 覆盖索引
- 5.6.4 优化器选择不使用索引的情况
- 5.6.5 索引提示
- 5.6.6 Multi-Range Read 优化
- 5.6.7 Index Condition Pushdown(ICP)优化
- 5.7 哈希算法
- 5.7.1 哈希表
- 5.7.2 InnoDB 存储引擎中的哈希算法
- 5.7.3 自适应哈希索引
- 5.8 全文检索
- 5.8.1 概述
- 5.8.2 倒排索引
- 5.8.3 InnoDB 全文检索
- 5.8.4 全文检索
- 5.9 小结
第 6 章 锁
- 6.1 什么是锁
- 6.2 lock 与 latch
- 6.3 InnoDB 存储引擎中的锁
- 6.3.1 锁的类型
- 6.3.2 一致性非锁定读
- 6.3.3 一致性锁定读
- 6.3.4 自增长与锁
- 6.3.5 外键和锁
- 6.4 锁的算法
- 6.4.1 行锁的 3 种算法
- 6.4.2 解决 Phantom Problem
- 6.5 锁问题
- 6.5.1 脏读
- 6.5.2 不可重复读
- 6.5.3 丢失更新
- 6.6 阻塞
- 6.7 死锁
- 6.7.1 死锁的概念
- 6.7.2 死锁概率
- 6.7.3 死锁的示例
- 6.8 锁升级
- 6.9 小结
第 7 章 事务
- 7.1 认识事务
- 7.1.1 概述
- 7.1.2 分类
- 7.2 事务的实现
- 7.2.1 redo
- 7.2.2 undo
- 7.2.3 purge
- 7.2.4 group commit
- 7.3 事务控制语句
- 7.4 隐式提交的 SQL 语句
- 7.5 对于事务操作的统计
- 7.6 事务的隔离级别
- 7.7 分布式事务
- 7.7.1 MySQL 数据库分布式事务
- 7.7.2 内部 XA 事务
- 7.8 不好的事务习惯
- 7.8.1 在循环中提交
- 7.8.2 使用自动提交
- 7.8.3 使用自动回滚
- 7.9 长事务
- 7.10 小结
第 8 章 备份与恢复
- 8.1 备份与恢复概述
- 8.2 冷备
- 8.3 逻辑备份
- 8.3.1 mysqldump
- 8.3.2 SELECT…INTO OUTFILE
- 8.3.3 逻辑备份的恢复
- 8.3.4 LOAD DATA INFILE
- 8.3.5 mysqlimport
- 8.4 二进制日志备份与恢复
- 8.5 热备
- 8.5.1 ibbackup
- 8.5.2 XtraBackup
- 8.5.3 XtraBackup 实现增量备份
- 8.6 快照备份
- 8.7 复制
- 8.7.1 复制的工作原理
- 8.7.2 快照 + 复制的备份架构
- 8.8 小结
第 9 章 性能调优
- 9.1 选择合适的 CPU
- 9.2 内存的重要性
- 9.3 硬盘对数据库性能的影响
- 9.3.1 传统机械硬盘
- 9.3.2 固态硬盘
- 9.4 合理地设置 RAID
- 9.4.1 RAID 类型
- 9.4.2 RAID Write Back 功能
- 9.4.3 RAID 配置工具
- 9.5 操作系统的选择
- 9.6 不同的文件系统对数据库性能的影响
- 9.7 选择合适的基准测试工具
- 9.7.1 sysbench
- 9.7.2 mysql-tpcc
- 9.8 小结
第 10 章 InnoDB 存储引擎源代码的编译和调试
- 10.1 获取 InnoDB 存储引擎源代码
- 10.2 InnoDB 源代码结构
- 10.3 MySQL 5.1 版本编译和调试 InnoDB 源代码
- 10.3.1 Windows 下的调试
- 10.3.2 Linux 下的调试
- 10.4 cmake 方式编译和调试 InnoDB 存储引擎
- 10.5 小结