如果你害怕以MySQL权威专家自恃,又岂敢错过了这部神书?
一言以蔽之,读得好,编辑得好,必须参照时非常容易到爆!
我但是从头至尾看过一遍上一版,可還是直截了当拿出了这部《高性能MySQL(第3版)》,并且看了后一点都我不后悔……
◎ 学习培训MySQL新特性,包含储存模块、系统分区数据库、触发器和景图
◎ 保持拷贝的改善、高可用性和集群服务器◎ 得到云端运作MySQL的高性能
◎ 提升高级查询特性,如全文索引
◎ 从当代的多核CPU和固态盘中获利
◎ 探寻备份和恢复的对策,包含*的免费在线备份工具
《高性能MySQL(第3版)》是MySQL 行业的极好之作,有着普遍的知名度。第3 版升级了很多的內容,不仅包含了新的MySQL5.5版本号的新特性,也叙述了有关固态盘、高可扩展性设计方案和云计算环境下的数据库有关的新內容,原来的标准检测和性能提升一部分也干了很多的拓展和填补。本书共分成16章和6 个附则,内容包括MySQL构架和历史时间,标准检测和性能分析,数据库硬件软件性能提升,拷贝、备份和恢复,高可用性与高可扩展性,及其云空间的MySQL和MySQL有关专用工具等层面的內容。每一章全是相对性单独的主题风格,用户能够有可选择性地独立阅读文章。
《高性能MySQL(第3版)》不仅合适数据库管理人员(DBA)阅读文章,也合适开发者参照学习培训。无论是数据库初学者還是权威专家,坚信都能从这书有一定的获得。
目录
- 第1章 MySQL 架构与历史
- 1.1 MySQL 逻辑架构
- 1.1.1 连接管理与安全性
- 1.1.2 优化与执行
- 1.2 并发控制
- 1.2.1 读写锁
- 1.2.2 锁粒度
- 1.3 事务
- 1.3.1 隔离级别
- 1.3.2 死锁
- 1.3.3 事务日志
- 1.3.4 MySQL 中的事务
- 1.4 多版本并发控制
- 1.5 MySQL 的存储引擎
- 1.5.1 InnoDB 存储引擎
- 1.5.2 MyISAM 存储引擎
- 1.5.3 MySQL 内建的其他存储引擎
- 1.5.4 第三方存储引擎
- 1.5.5 选择合适的引擎
- 1.5.6 转换表的引擎
- 1.6 MySQL 时间线(Timeline)
- 1.7 MySQL 的开发模式
- 1.8 总结
- 第2章 MySQL 基准测试
- 2.1 为什么需要基准测试
- 2.2 基准测试的策略
- 2.2.1 测试何种指标
- 2.3 基准测试方法
- 2.3.1 设计和规划基准测试
- 2.3.2 基准测试应该运行多长时间
- 2.3.3 获取系统性能和状态
- 2.3.4 获得准确的测试结果
- 2.3.5 运行基准测试并分析结果
- 2.3.6 绘图的重要性
- 2.4 基准测试工具
- 2.4.1 集成式测试工具
- 2.4.2 单组件式测试工具
- 2.5 基准测试案例
- 2.5.1 http_load
- 2.5.2 MySQL 基准测试套件 .
- 2.5.3 sysbench
- 2.5.4 数据库测试套件中的dbt2 TPC-C 测试
- 2.5.5 Percona 的TPCC-MySQL 测试工具
- 2.6 总结
- 第3章 服务器性能剖析
- 3.1 性能优化简介
- 3.1.1 通过性能剖析进行优化
- 3.1.2 理解性能剖析
- 3.2 对应用程序进行性能剖析
- 3.2.1 测量PHP 应用程序
- 3.3 剖析MySQL 查询
- 3.3.1 剖析服务器负载
- 3.3.2 剖析单条查询
- 3.3.3 使用性能剖析
- 3.4 诊断间歇性问题
- 3.4.1 单条查询问题还是服务器问题
- 3.4.2 捕获诊断数据
- 3.4.3 一个诊断案例
- 3.5 其他剖析工具
- 3.5.1 使用USER_STATISTICS 表
- 3.5.2 使用strace
- 3.6 总结
- 第4章 Schema 与数据类型优化
- 4.1 选择优化的数据类型
- 4.1.1 整数类型
- 4.1.2 实数类型
- 4.1.3 字符串类型
- 4.1.4 日期和时间类型
- 4.1.5 位数据类型
- 4.1.6 选择标识符(identifier)
- 4.1.7 特殊类型数据
- 4.2 MySQL schema 设计中的陷阱
- 4.3 范式和反范式
- 4.3.1 范式的优点和缺点
- 4.3.2 反范式的优点和缺点 .
- 4.3.3 混用范式化和反范式化
- 4.4 缓存表和汇总表
- 4.4.1 物化视图
- 4.4.2 计数器表
- 4.5 加快ALTER TABLE 操作的速度
- 4.5.1 只修改.frm 文件
- 4.5.2 快速创建MyISAM 索引
- 4.6 总结
- 第5章 创建高性能的索引
- 5.1 索引基础
- 5.1.1 索引的类型
- 5.2 索引的优点
- 5.3 高性能的索引策略
- 5.3.1 独立的列
- 5.3.2 前缀索引和索引选择性
- 5.3.3 多列索引
- 5.3.4 选择合适的索引列顺序
- 5.3.5 聚簇索引
- 5.3.6 覆盖索引
- 5.3.7 使用索引扫描来做排序
- 5.3.8 压缩(前缀压缩)索引
- 5.3.9 冗余和重复索引
- 5.3.10 未使用的索引
- 5.3.11 索引和锁
- 5.4 索引案例学习
- 5.4.1 支持多种过滤条件
- 5.4.2 避免多个范围条件
- 5.4.3 优化排序
- 5.5 维护索引和表
- 5.5.1 找到并修复损坏的表 .
- 5.5.2 更新索引统计信息
- 5.5.3 减少索引和数据的碎片
- 5.6 总结
- 第6章 查询性能优化
- 6.1 为什么查询速度会慢
- 6.2 慢查询基础:优化数据访问
- 6.2.1 是否向服务器请求了不需要的数据
- 6.2.2 MySQL 是否在扫描额外的记录
- 6.3 重构查询的方式
- 6.3.1 一个复杂查询还是多个简单查询
- 6.3.2 切分查询
- 6.3.3 分解关联查询
- 6.4 查询执行的基础
- 6.4.1 MySQL 客户端/ 服务器通信协议
- 6.4.2 查询缓存
- 6.4.3 查询优化处理
- 6.4.4 查询执行引擎
- 6.4.5 返回结果给客户端
- 6.5 MySQL 查询优化器的局限性
- 6.5.1 关联子查询
- 6.5.2 UNION 的限制
- 6.5.3 索引合并优化
- 6.5.4 等值传递
- 6.5.5 并行执行
- 6.5.6 哈希关联
- 6.5.7 松散索引扫描
- 6.5.8 最大值和最小值优化 .
- 6.5.9 在同一个表上查询和更新
- 6.6 查询优化器的提示(hint)
- 6.7 优化特定类型的查询
- 6.7.1 优化COUNT() 查询
- 6.7.2 优化关联查询
- 6.7.3 优化子查询
- 6.7.4 优化GROUP BY 和DISTINCT
- 6.7.5 优化LIMIT 分页
- 6.7.6 优化SQL_CALC_FOUND_ROWS
- 6.7.7 优化UNION 查询
- 6.7.8 静态查询分析
- 6.7.9 使用用户自定义变量 .
- 6.8 案例学习
- 6.8.1 使用MySQL 构建一个队列表
- 6.8.2 计算两点之间的距离 .
- 6.8.3 使用用户自定义函数 .
- 6.9 总结
- 第7章 MySQL 高级特性
- 7.1 分区表
- 7.1.1 分区表的原理
- 7.1.2 分区表的类型
- 7.1.3 如何使用分区表
- 7.1.4 什么情况下会出问题 .
- 7.1.5 查询优化
- 7.1.6 合并表
- 7.2 视图
- 7.2.1 可更新视图
- 7.2.2 视图对性能的影响
- 7.2.3 视图的限制
- 7.3 外键约束
- 7.4 在MySQL 内部存储代码
- 7.4.1 存储过程和函数
- 7.4.2 触发器
- 7.4.3 事件
- 7.4.4 在存储程序中保留注释
- 7.5 游标
- 7.6 绑定变量
- 7.6.1 绑定变量的优化
- 7.6.2 SQL 接口的绑定变量
- 7.6.3 绑定变量的限制
- 7.7 用户自定义函数
- 7.8 插件
- 7.9 字符集和校对
- 7.9.1 MySQL 如何使用字符集
- 7.9.2 选择字符集和校对规则
- 7.9.3 字符集和校对规则如何影响查询
- 7.10 全文索引
- 7.10.1 自然语言的全文索引
- 7.10.2 布尔全文索引
- 7.10.3 MySQL5.1 中全文索引的变化
- 7.10.4 全文索引的限制和替代方案
- 7.10.5 全文索引的配置和优化
- 7.11 分布式(XA)事务
- 7.11.1 内部XA 事务
- 7.11.2 外部XA 事务
- 7.12 查询缓存
- 7.12.1 MySQL 如何判断缓存命中
- 7.12.2 查询缓存如何使用内存
- 7.12.3 什么情况下查询缓存能发挥作用
- 7.12.4 如何配置和维护查询缓存
- 7.12.5 InnoDB 和查询缓存 .
- 7.12.6 通用查询缓存优化
- 7.12.7 查询缓存的替代方案
- 7.13 总结
- 第8章 优化服务器设置
- 8.1 MySQL 配置的工作原理
- 8.1.1 语法、作用域和动态性
- 8.1.2 设置变量的副作用
- 8.1.3 入门
- 8.1.4 通过基准测试迭代优化
- 8.2 什么不该做
- 8.3 创建MySQL 配置文件
- 8.3.1 检查MySQL 服务器状态变量
- 8.4 配置内存使用
- 8.4.1 MySQL 可以使用多少内存?
- 8.4.2 每个连接需要的内存 .
- 8.4.3 为操作系统保留内存 .
- 8.4.4 为缓存分配内存
- 8.4.5 InnoDB 缓冲池(Buffer Pool)
- 8.4.6 MyISAM 键缓存(Key Caches)
- 8.4.7 线程缓存
- 8.4.8 表缓存(Table Cache)
- 8.4.9 InnoDB 数据字典(Data Dictionary)
- 8.5 配置MySQL 的I/O 行为
- 8.5.1 InnoDB I/O 配置
- 8.5.2 MyISAM 的I/O 配置 .
- 8.6 配置MySQL 并发 .
- 8.6.1 InnoDB 并发配置
- 8.6.2 MyISAM 并发配置
- 8.7 基于工作负载的配置
- 8.7.1 优化BLOB 和TEXT 的场景
- 8.7.2 优化排序(Filesorts).
- 8.8 完成基本配置
- 8.9 安全和稳定的设置
- 8.10 高级InnoDB 设置
- 8.11 总结
- 第9章 操作系统和硬件优化
- 9.1 什么限制了MySQL 的性能
- 9.2 如何为MySQL 选择CPU
- 9.2.1 哪个更好:更快的CPU 还是更多的CPU
- 9.2.2 CPU 架构
- 9.2.3 扩展到多个CPU 和核心
- 9.3 平衡内存和磁盘资源
- 9.3.1 随机I/O 和顺序I/O
- 9.3.2 缓存,读和写
- 9.3.3 工作集是什么
- 9.3.4 找到有效的内存/ 磁盘比例
- 9.3.5 选择硬盘
- 9.4 固态存储
- 9.4.1 闪存概述
- 9.4.2 闪存技术
- 9.4.3 闪存的基准测试
- 9.4.4 固态硬盘驱动器(SSD)
- 9.4.5 PCIe 存储设备
- 9.4.6 其他类型的固态存储 .
- 9.4.7 什么时候应该使用闪存
- 9.4.8 使用Flashcache
- 9.4.9 优化固态存储上的MySQL
- 9.5 为备库选择硬件
- 9.6 RAID 性能优化
- 9.6.1 RAID 的故障转移、恢复和镜像
- 9.6.2 平衡硬件RAID 和软件RAID
- 9.6.3 RAID 配置和缓存
- 9.7 SAN 和NAS
- 9.7.1 SAN 基准测试
- 9.7.2 使用基于NFS 或SMB 的SAN
- 9.7.3 MySQL 在SAN 上的性能
- 9.7.4 应该用SAN 吗
- 9.8 使用多磁盘卷
- 9.9 网络配置
- 9.10 选择操作系统
- 9.11 选择文件系统
- 9.12 选择磁盘队列调度策略
- 9.13 线程
- 9.14 内存交换区
- 9.15 操作系统状态
- 9.15.1 如何阅读vmstat 的输出
- 9.15.2 如何阅读iostat 的输出
- 9.15.3 其他有用的工具
- 9.15.4 CPU 密集型的机器
- 9.15.5 I/O 密集型的机器
- 9.15.6 发生内存交换的机器
- 9.15.7 空闲的机器
- 9.16 总结
- 第10章 复制
- 10.1 复制概述
- 10.1.1 复制解决的问题
- 10.1.2 复制如何工作
- 10.2 配置复制
- 10.2.1 创建复制账号
- 10.2.2 配置主库和备库
- 10.2.3 启动复制
- 10.2.4 从另一个服务器开始复制
- 10.2.5 推荐的复制配置
- 10.3 复制的原理
- 10.3.1 基于语句的复制
- 10.3.2 基于行的复制
- 10.3.3 基于行或基于语句:哪种更优
- 10.3.4 复制文件
- 10.3.5 发送复制事件到其他备库
- 10.3.6 复制过滤器
- 10.4 复制拓扑
- 10.4.1 一主库多备库
- 10.4.2 主动- 主动模式下的主- 主复制
- 10.4.3 主动- 被动模式下的主- 主复制
- 10.4.4 拥有备库的主- 主结构
- 10.4.5 环形复制
- 10.4.6 主库、分发主库以及备库
- 10.4.7 树或金字塔形
- 10.4.8 定制的复制方案
- 10.5 复制和容量规划
- 10.5.1 为什么复制无法扩展写操作
- 10.5.2 备库什么时候开始延迟
- 10.5.3 规划冗余容量
- 10.6 复制管理和维护
- 10.6.1 监控复制
- 10.6.2 测量备库延迟
- 10.6.3 确定主备是否一致
- 10.6.4 从主库重新同步备库
- 10.6.5 改变主库
- 10.6.6 在一个主- 主配置中交换角色
- 10.7 复制的问题和解决方案
- 10.7.1 数据损坏或丢失的错误
- 10.7.2 使用非事务型表
- 10.7.3 混合事务型和非事务型表
- 10.7.4 不确定语句
- 10.7.5 主库和备库使用不同的存储引擎
- 10.7.6 备库发生数据改变
- 10.7.7 不唯一的服务器ID .
- 10.7.8 未定义的服务器ID .
- 10.7.9 对未复制数据的依赖性
- 10.7.10 丢失的临时表
- 10.7.11 不复制所有的更新 .
- 10.7.12 InnoDB 加锁读引起的锁争用
- 10.7.13 在主- 主复制结构中写入两台主库
- 10.7.14 过大的复制延迟
- 10.7.15 来自主库的过大的包
- 10.7.16 受限制的复制带宽 .
- 10.7.17 磁盘空间不足
- 10.7.18 复制的局限性
- 10.8 复制有多快
- 10.9 MySQL 复制的高级特性
- 10.10 其他复制技术
- 10.11 总结
- 第11章 可扩展的MySQL
- 11.1 什么是可扩展性
- 11.1.1 正式的可扩展性定义
- 11.2 扩展MySQL
- 11.2.1 规划可扩展性
- 11.2.2 为扩展赢得时间
- 11.2.3 向上扩展
- 11.2.4 向外扩展
- 11.2.5 通过多实例扩展
- 11.2.6 通过集群扩展
- 11.2.7 向内扩展
- 11.3 负载均衡
- 11.3.1 直接连接
- 11.3.2 引入中间件
- 11.3.3 一主多备间的负载均衡
- 11.4 总结
- 第12章 高可用性
- 12.1 什么是高可用性
- 12.2 导致宕机的原因
- 12.3 如何实现高可用性
- 12.3.1 提升平均失效时间(MTBF)
- 12.3.2 降低平均恢复时间(MTTR)
- 12.4 避免单点失效
- 12.4.1 共享存储或磁盘复制
- 12.4.2 MySQL 同步复制
- 12.4.3 基于复制的冗余
- 12.5 故障转移和故障恢复
- 12.5.1 提升备库或切换角色
- 12.5.2 虚拟IP 地址或IP 接管
- 12.5.3 中间件解决方案
- 12.5.4 在应用中处理故障转移
- 12.6 总结
- 第13章 云端的MySQL
- 13.1 云的优点、缺点和相关误解
- 13.2 MySQL 在云端的经济价值
- 13.3 云中的MySQL 的可扩展性和高可用性
- 13.4 四种基础资源
- 13.5 MySQL 在云主机上的性能
- 13.5.1 在云端的MySQL 基准测试
- 13.6 MySQL 数据库即服务(DBaaS)
- 13.6.1 Amazon RDS
- 13.6.2 其他DBaaS 解决方案
- 13.7 总结
- 第14章 应用层优化
- 14.1 常见问题
- 14.2 Web 服务器问题
- 14.2.1 寻找最优并发度
- 14.3 缓存
- 14.3.1 应用层以下的缓存
- 14.3.2 应用层缓存
- 14.3.3 缓存控制策略
- 14.3.4 缓存对象分层
- 14.3.5 预生成内容
- 14.3.6 作为基础组件的缓存
- 14.3.7 使用HandlerSocket 和memcached
- 14.4 拓展MySQL
- 14.5 MySQL 的替代品
- 14.6 总结
- 第15章 备份与恢复
- 15.1 为什么要备份
- 15.2 定义恢复需求
- 15.3 设计MySQL 备份方案
- 15.3.1 在线备份还是离线备份
- 15.3.2 逻辑备份还是物理备份
- 15.3.3 备份什么
- 15.3.4 存储引擎和一致性
- 15.4 管理和备份二进制日志
- 15.4.1 二进制日志格式
- 15.4.2 安全地清除老的二进制日志
- 15.5 备份数据
- 15.5.1 生成逻辑备份
- 15.5.2 文件系统快照
- 15.6 从备份中恢复
- 15.6.1 恢复物理备份
- 15.6.2 还原逻辑备份
- 15.6.3 基于时间点的恢复
- 15.6.4 更高级的恢复技术
- 15.6.5 InnoDB 崩溃恢复
- 15.7 备份和恢复工具
- 15.7.1 MySQL Enterprise Backup
- 15.7.2 Percona XtraBackup .
- 15.7.3 mylvmbackup
- 15.7.4 Zmanda Recovery Manager
- 15.7.5 mydumper
- 15.7.6 mysqldump.
- 15.8 备份脚本化
- 15.9 总结
- 第16章 MySQL 用户工具
- 16.1 接口工具
- 16.2 命令行工具集
- 16.3 SQL 实用集
- 16.4 监测工具
- 16.4.1 开源的监控工具
- 16.4.2 商业监控系统
- 16.4.3 Innotop 的命令行监控
- 16.5 总结
- 附录A MySQL 分支与变种
- 附录B MySQL 服务器状态
- 附录C 大文件传输
- 附录D EXPLAIN
- 附录E 锁的调试
- 附录F 在MySQL 上使用Sphinx
- 索引