• 高性能MySQL 施瓦茨 (Baron Schwartz)|扎伊采夫 (Peter Zaitsev)|特卡琴科 (Vadim Tkachenko) 电子工业出版社
  • 高性能MySQL 施瓦茨 (Baron Schwartz)|扎伊采夫 (Peter Zaitsev)|特卡琴科 (Vadim Tkachenko) 电子工业出版社
21年品牌 40万+商家 超1.5亿件商品

高性能MySQL 施瓦茨 (Baron Schwartz)|扎伊采夫 (Peter Zaitsev)|特卡琴科 (Vadim Tkachenko) 电子工业出版社

正版二手书,发货前杀菌消毒,保证符合品相,不缺页,圆通发货(圆通不到走邮政),下单后24小时内发货。

24.32 1.9折 128 八品

仅1件

天津宝坻
认证卖家担保交易快速发货售后保障

作者施瓦茨 (Baron Schwartz)|扎伊采夫 (Peter Zaitsev)|特卡琴科 (Vadim Tkachenko)

出版社电子工业出版社

ISBN9787121198854

出版时间2013-05

装帧平装

开本16开

定价128元

货号1474607764914948096

上书时间2024-12-26

启灵正版书店

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:八品
商品描述
前言

 我们写这本书不仅仅是为了满足MySQL 应用开发者的需求,也是为了满足MySQL 数据库管理员的需要。我们假定读者已经有了一定的MySQL 基础。我们还假定读者对于系统管理、网络和类Unix 的操作系统都有一些了解。
  本书的第二版为读者提供了大量的信息,但没有一本书是可以涵盖一个主题的所有方面的。在第二版和第三版之间的这段时间里,我们记录了数以千计有趣的问题,其中有些是我们解决的,也有一些是我们观察到其他人解决的。当我们在规划第三版的时候发现,如果要把这些主题完全覆盖,可能三千页到五千页的篇幅都还不够,这样本书的完成就遥遥无期了。在反思这个问题后,我们意识到第二版强调的广泛的覆盖度事实上有其自身的限制,从某种意义上来说也没有引导读者如何按照MySQL 的方式来思考问题。
  所以第三版和第二版的关注点有很大的不同。我们虽然还是会包含很多的信息,并且会强调同样的诸如可靠性和正确性的目标,但我们也会在本书中尝试更深入的讨论:我们会指出MySQL 为什么会这样做,而不是MySQL 做了什么。我们会使用更多的演示和案例学习来将上述原则落地。通过这样的方式,我们希望能够尝试回到下面这样的问题:“给出MySQL 的内部结构和操作,对于实际应用能带来什么帮助?为什么能有这样的帮助?如何让MySQL 适合(或者不适合)特定的需求?”
  最后,我们希望关于MySQL 内部原理的知识能够帮助大家解决本书没有覆盖到的一些情况。我们更希望读者能培养发现新问题的洞察力,能学习和实践合理的方式来设计、维护和诊断基于MySQL 的系统。
  本书是如何组织的
  本书涵盖了许多复杂的主题。在这里,我们将解释一下是如何将这些主题有序地组织在一起的,以便于阅读和学习。
  概述
  第1 章是非常基础的一章,在更深入地学习之前建议先熟悉一下这部分内容。在有效地使用MySQL 之前应当理解它是如何组织的。本章解释了MySQL 的架构及其存储引擎的关键设计。如果读者还不太熟悉关系数据库和事务的基础知识,本章也可以带来一点帮助。如果之前已经对其他关系数据库如Oracle 比较熟悉,本章也可以帮助读者了解MySQL 的入门知识。本章还包括了一点MySQL 的历史背景:MySQL 随着时间的演进、最近的公司所有权更替,以及我们认为比较重要的内容。
  打造坚实的基础
  本书前几章的内容在今后使用MySQL 的过程中可能会被不断地引用到,它们是非常基础的内容。
  第2章讨论了基准测试的基础,例如服务器可以处理的工作负载的类型、处理特定任务的速度等。基准测试是一项至关重要的技能,可用于评估服务器在不同负载下的表现,但也要明白在什么情况下基准测试不能发挥作用。
  第3章介绍了我们常用于故障诊断和服务器性能问题分析的一种面向响应时间的方法。该方法已经被证明可以解决我们曾碰到过的一些极为棘手的问题。当然也可以选择修改我们所使用的方法(实际上我们的方法也是从Cary Millsap 的方法修改而来的),但无论如何,至少不能没有方法胡乱猜测。
  从第4章到第6 章,连续介绍了三个关于良好的数据库逻辑设计和物理设计基础的话题。第4 章涵盖了不同数据类型的细节差别以及表设计的原则。第5 章则展开讨论了索引,这是数据库的物理设计。对于索引的深入理解和利用是高效使用MySQL 的基础,相信这一章会经常需要回头翻看。而第6 章则包含了分析MySQL 的查询是如何执行的,以及如何利用查询优化器的话题。该章也包含了大量常见类型查询的例子,演示了MySQL 是如何做好工作的,以及如何改写查询以利用MySQL 的特性。
  到此为止,已经覆盖了关于数据库的基础内容:表、索引、数据和查询。第7 章则在MySQL 基础知识之外介绍了MySQL 的高级特性是如何工作的。这章的内容包括分区、存储引擎、触发器,以及字符集。MySQL 中这些特性的实现可能不同于其他数据库,可能之前读者并不清楚这些不同,因此理解它们对于性能可能会带来新的收益。
  配置应用程序
  接下来的两章讲述的是如何让MySQL、应用程序及硬件一起很好地工作。第8 章介绍了如何配置MySQL,以便更好地利用硬件,达到更好的可靠性和鲁棒性。第9 章解释了如何让操作系统和硬件工作得更好。另外也深入讨论了固态硬盘,为高可扩展性应用发挥更好的性能提供了硬件配置的建议。
  上面两章都一定程度地涉及了MySQL 的内部知识。这将会是一个反复出现的主题,附录中也会有相关内容可以学习到MySQL 的内部是如何实现的,理解了这些知识将帮助读者更好地理解某些现象背后的原理。
  作为基础设施组件的MySQL
  MySQL 不是存在于真空中的,而是应用整体的一个环节,因此需要考虑整个应用架构的鲁棒性。下面的章节将告诉我们该如何做到这一点。
  第10 章讨论了MySQL 的杀手级特性:能够设置多个服务器从一台主服务器同步数据。不幸的是,复制可能也是MySQL 给很多用户带来困扰的一个特性。但实际上不应该发生这样的情况,本章将告诉你如何让复制运行得更好。
  第11章讨论了什么是可扩展性(这和性能不是一回事),应用和系统为什么会无法扩展,该怎么改善扩展性。如果能够正确地处理,MySQL 的可扩展性是足以应付任何需求的。
  第12章讲述的是和可扩展性相关但又完全不同的主题:如何保障MySQL 稳定而正确地持续运行。第13 章将告诉你当MySQL 在云计算环境中运行时会有什么不同的事情发生。
  第14章解释了什么是全方位的优化(full-stack optimization),就是从前端到后端的整体优化,从用户体验开始直到数据库。
  即使是世界上设计最好、最具可扩展性的架构,如果停电会导致彻底崩溃,无法抵御恶意攻击,解决不了应用的bug 和程序员的错误,以及其他一些灾难场景,那就不是什么好的架构。第15 章讨论了MySQL 数据库各种备份与恢复的场景。这些策略可以帮助读者减少在各种不可抗的硬件失效时的宕机时间,保证在各种灾难下的数据最终可恢复。
  其他有用的主题
  在本书的最后一章以及附录中,我们探讨了一些无法明确地放到前面章节的内容,以及一些被前面多个章节引用而需要特别注意的主题。
  第16章探索了一些可以帮助用户更有效地管理和监控MySQL 服务器的工具,有些是开源的,也有些是商业的。
  附录A 介绍了近年来成长迅速的三个主要的非MySQL 官方版本,其中一个是我们公司在维护的产品。知道还有其他什么是可用的选择是有价值的;很多MySQL 难以解决的棘手问题在其他的变种版本中说不定就不是问题了。这三个版本中的两个(Percona Server 和MariaDB)是MySQL 的完全可替换版本,所以尝试使用的成本相对来说是很低的。当然,在这里我们也需要补充一点,Oracle 提供的MySQL 官方版本对于大多数用户来说都能服务得很好。
  附录B 演示了如何检查MySQL 服务器。知道如何从服务器获取状态信息是非常重要的;而了解这些状态代表的意义则更加重要。这里将覆盖SHOW INNODB STATUS 的输出结果,因此这里包含了InnoDB 事务存储引擎的深入信息。在这个附录中讨论了很多InnoDB的内部信息。
  附录C 演示了如何高效地将大文件从一个地方复制到另外一个地方。如果要管理大量的数据,这种操作是经常都会碰到的。附录D 演示了如何真正地使用并理解EXPLAIN 命令。附录E 演示了如何破除不同查询所请求的锁互相干扰的问题。最后,附录F 介绍了Sphinx,一个基于MySQL 的高性能的全文索引系统。



导语摘要
 怎样才能最大程度发挥MysQL的能力?在《高性能MySQL(第3版)》(作者:施瓦茨)一书中,我们将学习关于schema设计、索引优化、查询优化等方面的高级技术,以及如何使用这些技术调优MySQL服务器、操作系统和硬件,以发挥它们的全部潜力。本书也会教授读者如何通过复制、负载均衡、高可用和容灾等技术,使用安全且经过实践的方式来扩展应用。
本书第3版更新了大量内容,以反映最新版本MysQL和InnoDB在性能、特性和工具方面的改进。本书不仅提供了MySQL如何工作的示例,也向读者介绍了系统为什么会如此工作。并且通过故事演示和案例学习的方式,说明MysQL在实际应用中的一些原则。读完本书,读者将学会如何用MysQL的方式思考。

作者简介

 BaronSchwartz是一位软件工程师,居住在弗吉尼亚州的Charlottesville,网络常用名是Xaprb,这是按照QWERTY键盘的顺序在Dvorak键盘上打出来的名字。在不忙于解决有趣的编程挑战时,Baron会和他的妻子Lynn以及小狗Carbon一起享受闲暇的时光。他有一个软件工程方面的博客。
  PeterZaitsev曾经是MySQLAB公司高性能组的经理,目前在运作mysqlperformanceblog.com网站。他擅长于帮助那些每天有数以百万计访问量的网站的管理员解决问题,这些网站通常需要几百台机器来处理TB级的数据。他常常为了解决一个问题而不停地升级硬件和软件(比如查询优化)。Peter还经常在各种会议上演讲。
  VadimTkachenko曾经是MySQLAB公司的性能工程师。作为一名在多线程编程和同步方面的专家,他的主要工作是基准测试、性能剖析,以及找出系统的性能瓶颈。他还在性能监控和调优方面做了一些工作,使得MySQL在多核机器上有更好的可扩展性。
  译者简介
  宁海元有超过十年的数据库管理经验,从最初的SQLServer2000到Oracle再到MySQL,擅长数据库高可用架构、性能优化和故障诊断。2007年加入*,带领*DBA团队完成了数据库的垂直拆分、水平拆分,迁移到MySQL体系等主要工作,为*业务的快速增长提供支撑。目前专注于无线数据领域。网络常用名NinGoo,
  周振兴毕业于北京师范大学数学系,2009年加入*数据库团队,负责MySQL运维管理工作,有丰富的MySQL性能优化、Troubleshooting经验,对MySQL主要模块的实现和原理有深入的研究,经历了*MySQL实例从30到3000的发展,对系统架构、高可用环境规划都有深入理解。
  彭立勋2010年大学毕业后加入********运维部。作为一名MySQLDBA,在运维MySQL的过程中对MySQL和InnoDB的一些功能和缺陷进行了补充,编写了多主复制和数据闪回等补丁。目前在阿里集团核心系统研发部数据库组,专注于MySQL数据库相关的开发工作。后来一些补丁被MySQL之父Mony看中,多主复制、线程内存监控等补丁被合并到了MariaDB10.0版本,本人也因此成为MariaDB提交组(Maria-captains)成员。
  翟卫祥毕业于武汉大学,研究生阶段从事数据库相关研究。毕业后就职数据库技术团队至今,主要负责阿里内部MySQL代码分支维护,包括MySQLBugFix及新特性开发。对MySQL内核有一定的研究。
  刘辉2008年毕业于西安电子科技大学计算机系,硕士学位。2011年加入数据库技术团队,花名希羽,MySQL内核开发工程师。



目录

推荐序
前言

 

第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.

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP