高性能MySQL(第版)


《高性能MySQL(第3版)》是MySQL领域的极佳之作,拥有广泛的影响力。第3版更新了大量的内容,不但涵盖了新的MySQL5.5版本的新特性,也讲述了关于固态盘、高可扩展性设计和云计算环境下的数据库相关的新内容,原有的基准测试和性能优化部分也做了大量的扩展和补充。全书共分为16章和6个附录,内容涵盖MySQL架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可用与高可扩展性,以及云端的MySQL和MySQL相关工具等方面的内容。每一章都是相对独立的主题,读者可以有选择性地单独阅读
  《高性能MySQL(第3版)》不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。


作者简介

  BaronSchwartz是一位软件工程师,居住在弗吉尼亚州的Charlottesville,网络常用名是Xaprb,这是按照QWERTY键盘的顺序在Dvorak键盘上打出来的名字。在不忙于解决有趣的编程挑战时,Baron会和他的妻子Lynn以及小狗Carbon一起享受闲暇的时光。他有一个软件工程方面的博客。
  PeterZaitsev曾经是MySQLAB公司高性能组的经理,目前在运作mysqlperformanceblog.com网站。他擅长于帮助那些每天有数以百万计访问量的网站的管理员解决问题,这些网站通常需要几百台机器来处理TB级的数据。他常常为了解决一个问题而不停地升级硬件和软件(比如查询优化)。Peter还经常在各种会议上演讲。
  VadimTkachenko曾经是MySQLAB公司的性能工程师。作为一名在多线程编程和同步方面的专家,他的主要工作是基准测试、性能剖析,以及找出系统的性能瓶颈。他还在性能监控和调优方面做了一些工作,使得MySQL在多核机器上有更好的可扩展性。
  译者简介
  宁海元有超过十年的数据库管理经验,从一开始的SQLServer2000到Oracle再到MySQL,擅长数据库高可用架构、性能优化和故障诊断。
显示全部信息


目  录

第1章MySQL架构与历史

1.1MySQL逻辑架构
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.4MySQL中的事务
1.4多版本并发控制
1.5MySQL的存储引擎
1.5.1InnoDB存储引擎
1.5.2MyISAM存储引擎
1.5.3MySQL内建的其他存储引擎
1.5.4第三方存储引擎
1.5.5选择合适的引擎
1.5.6转换表的引擎
1.6MySQL时间线(Timeline)
1.7MySQL的开发模式
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.1http_load
2.5.2MySQL基准测试套件.
2.5.3sysbench
2.5.4数据库测试套件中的dbt2TPC-C测试
2.5.5Percona的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.2MySQLschema设计中的陷阱
4.3范式和反范式
4.3.1范式的优点和缺点
4.3.2反范式的优点和缺点.
4.3.3混用范式化和反范式化
4.4缓存表和汇总表
4.4.1物化视图
4.4.2计数器表
4.5加快ALTERTABLE操作的速度
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.2MySQL是否在扫描额外的记录 6.3重构查询的方式
6.3.1一个复杂查询还是多个简单查询
6.3.2切分查询
6.3.3分解关联查询
6.4查询执行的基础
6.4.1MySQL客户端/服务器通信协议
6.4.2查询缓存
6.4.3查询优化处理
6.4.4查询执行引擎
6.4.5返回结果给客户端
6.5MySQL查询优化器的局限性
6.5.1关联子查询
6.5.2UNION的限制
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优化GROUPBY和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.2SQL接口的绑定变量
7.6.3绑定变量的限制
7.7用户自定义函数
7.8插件
7.9字符集和校对
7.9.1MySQL如何使用字符集
7.9.2选择字符集和校对规则
7.9.3字符集和校对规则如何影响查询
7.10全文索引
7.10.1自然语言的全文索引
7.10.2布尔全文索引
7.10.3MySQL5.1中全文索引的变化
7.10.4全文索引的限制和替代方案
7.10.5全文索引的配置和优化
7.11分布式(XA)事务
7.11.1内部XA事务
7.11.2外部XA事务
7.12查询缓存
7.12.1MySQL如何判断缓存命中
7.12.2查询缓存如何使用内存
7.12.3什么情况下查询缓存能发挥作用
7.12.4如何配置和维护查询缓存
7.12.5InnoDB和查询缓存.
7.12.6通用查询缓存优化
7.12.7查询缓存的替代方案
7.13总结

第8章优化服务器设置
8.1MySQL配置的工作原理
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.1MySQL可以使用多少内存?
8.4.2每个连接需要的内存.
8.4.3为操作系统保留内存.
8.4.4为缓存分配内存
8.4.5InnoDB缓冲池(BufferPool)
8.4.6MyISAM键缓存(KeyCaches)
8.4.7线程缓存
8.4.8表缓存(TableCache)
8.4.9InnoDB数据字典(DataDictionary)
8.5配置MySQL的I/O行为
8.5.1InnoDBI/O配置
8.5.2MyISAM的I/O配置.
8.6配置MySQL并发.
8.6.1InnoDB并发配置
8.6.2MyISAM并发配置
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.2CPU架构
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.5PCIe存储设备
9.4.6其他类型的固态存储.
9.4.7什么时候应该使用闪存
9.4.8使用Flashcache
9.4.9优化固态存储上的MySQL
9.5为备库选择硬件
9.6RAID性能优化
9.6.1RAID的故障转移、恢复和镜像
9.6.2平衡硬件RAID和软件RAID
9.6.3RAID配置和缓存
9.7SAN和NAS
9.7.1SAN基准测试
9.7.2使用基于NFS或SMB的SAN
9.7.3MySQL在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.4CPU密集型的机器
9.15.5I/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.12InnoDB加锁读引起的锁争用
10.7.13在主-主复制结构中写入两台主库
10.7.14过大的复制延迟
10.7.15来自主库的过大的包
10.7.16受限制的复制带宽.
10.7.17磁盘空间不足
10.7.18复制的局限性
10.8复制有多快
10.9MySQL复制的高级特性
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.2MySQL同步复制
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.2MySQL在云端的经济价值
13.3云中的MySQL的可扩展性和高可用性
13.4四种基础资源
13.5MySQL在云主机上的性能
13.5.1在云端的MySQL基准测试
13.6MySQL数据库即服务(DBaaS)
13.6.1AmazonRDS
13.6.2其他DBaaS解决方案
13.7总结

第14章应用层优化
14.1常见问题
14.2Web服务器问题
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.5MySQL的替代品
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.5InnoDB崩溃恢复
15.7备份和恢复工具
15.7.1MySQLEnterpriseBackup
15.7.2PerconaXtraBackup.
15.7.3mylvmbackup
15.7.4ZmandaRecoveryManager
15.7.5mydumper
15.7.6mysqldump.
15.8备份脚本化
15.9总结

第16章MySQL用户工具
16.1接口工具
16.2命令行工具集
16.3SQL实用集
16.4监测工具
16.4.1开源的监控工具
16.4.2商业监控系统
16.4.3Innotop的命令行监控
16.5总结

附录AMySQL分支与变种
附录BMySQL服务器状态
附录C大文件传输
附录DEXPLAIN
附录E锁的调试
附录F在MySQL上使用Sphinx
索引


#现在前往

精选留言

高性能,MySQL,第版
sample
2020-07-15
写留言
签到
投稿
QQ咨询
返回顶部