千金良方——MySQL性能优化金字塔法则
  • 推荐3
  • 收藏4
  • 浏览1.2K

千金良方——MySQL性能优化金字塔法则

李春 , 罗小波 , 董红禹 (作者)  张春雨 (责任编辑)

  • 书  号:978-7-121-37520-0
  • 出版日期:2019-11-01
  • 页  数:728
  • 开  本:16(185*260)
  • 出版状态:上市销售
  • 维护人:符隆美
本书一共分为3篇:基础篇、案例篇和工具篇。“基础篇”从理论基础和基本原理层面介绍了MySQL的安装与配置、升级和体系结构,information_schema、sys_schema、performance_schema和mysql_schema,MySQL复制,MySQL事务,SQL语句优化及架构设计基础知识。“案例篇”从硬件和系统、MySQL架构等方面给出了性能优化的十几个案例,包括:性能测试的基本优化思路和最需要关注的性能指标解释、对日常SQL语句执行慢的基本定位、避免x86可用性的一般性方法、节能模式会怎样影响性能、I/O存储作为数据库最重要的依赖是如何影响数据库性能的、主备复制不一致可能有哪些原因、字符集不一致会造成哪些性能问题、在实际场景中锁的争用是怎样的。“工具篇”介绍了在MySQL性能优化过程中需要用到的各种工具,包括:dmidecode、top、dstat等硬件和系统排查工具;FIO、sysbench、HammerDB等压力测试工具;mysqldump、XtraBackup等备份工具;Percona、innotop、Prometheus等监控工具。
通过本书,读者可以掌握MySQL 5.7中的新特性,熟练地使用各种性能测试、排查、监控工具与方法,通过性能基准测试篇的学习,可帮助读者对生产系统的性能、瓶颈了然于心,通过性能基础优化的学习,可以让读者在现有硬件、架构下尽可能地低成本提高数据库的性能。通过架构优化的学习,可以让读者在碰到业务量增长时,能从容地选择如何进行架构升级等。通过大量丰富的实战案例,读者可以熟练掌握数据库自底层硬件到操作系统,再到数据库层的整体性能排查与调优的方法论,在无法通过调优解决问题时如何做架构选型与升级改造(例如:分布式改造、准实时同步改善OLAP场景等)。
李春:原阿里巴巴MySQL DBA团队技术Leader,全程参与阿里数据库架构从Oracle迁移到MySQL的过程,参与分布式中间件Cobar设计。现为沃趣科技联合创始人&首席架构师,负责MySQL、基础软件及部分关键组件的技术选型、风险评估等。
罗小波:沃趣科技高级数据库工程师,主要负责MySQL产品的数据库支撑与售后二线支撑。曾参与版本发布系统、轻量级监控系统、运维管理平台、数据库管理平台的设计与编写,熟悉MySQL体系结构,Innodb存储引擎,喜好专研开源技术,多次在公开场合做过线下线上数据库专题分享,发表过多篇与数据库相关的研究文章。
董红禹:沃趣科技MySQL DBA , 为过多家大型企业进行过故障解决、架构设计、性能优化,例如中信证券、浙江农信、陕西农信、邮储银行等。规划并实施了浙江农信互联网核心金融平台。
性能问题
这个世界是由问题组成的,理想的状态和实际状态之间的差异造成了问题。国家领导解决人民生活幸福的大问题,公司的总经理解决盈利的问题,而本书只想解决MySQL数据库性能这么一个“小问题”。
从某种程度来说,MySQL数据库性能优化的问题是一个并行的问题,归根结底是锁和资源争用的问题。举个例子:假设你要开一个餐饮店,你需要取好店名,到工商局领取开业登记注册证书,到卫生防疫站申请卫生许可,到物价局进行物价审核,如果要卖酒,则需要到工商部门办理酒类经营许可证,到税务局办理税务登记,到银行开户,还需要找厨师、找洗碗工、找采购人员、找门面、协调店面转让、进行店面装修、做广告牌,等等。
如果想尽快把餐饮店开起来,就需要同时做更多的事情,就像计算机一样,并行地去做更多的事情。但是当你真正去做这些事情的时候,会发现:
• 总有一两件事情耗费的时间特别长,会最大程度地影响餐饮店什么时候能开起来。比如找到合适的店面或者合适的厨师。
• 有些事情是相互依赖的,一件事情必须依赖于另一件事情的完成。比如工商登记就取决于你要准备好店名,店面装修依赖于门面已经租好了,等等。
• 有些事情特别重要,它决定了这个餐饮店是否能长期经营下去。例如厨师做的菜是否足够好、足够快,运营的成本是否足够低而能产生足够的利润支撑餐饮店继续运营。
其实性能优化要做的就是以下事情:
• 了解基本原理。找到事情的因果关系和依赖关系,让尽量不相关的事情能并行做起来。
• 要事第一。找到当前最重要、最需要优化的地方,投入时间和精力,不断去改进它、优化它。
• 切中要害。找到耗费时间最长的地方,想方设法缩短它的时间。
本书的作者尝试通过上述方法论来找到MySQL性能优化的办法并呈现给读者。
数据库的性能提升
从计算机出现的第一天起,性能作为鞭策者就不断地促进计算机及系统的演进。从最开始的人工输入命令等待计算机执行,到利用批处理任务提升利用率,再到通过多进程和多线程并发来进一步提升效率,性能其实一直是计算机工程师想要努力去解决和改善的重要难题。
上面说的都是对已有系统的性能优化,数据库的性能优化其实可以在做设计之前就开始。
数据库的性能优化首先是计算机系统的优化。数据库程序是运行在计算机系统上的应用程序,需要先优化的就是计算机系统。也就是说,让硬件尽量均衡,操作系统充分发挥硬件的全部性能,而数据库充分利用操作系统和文件系统提供的便利发挥全部性能,而且避免资源的相互竞争。
数据库的性能优化其次是SQL语句的优化。上层应用都通过SQL语句与数据库打交道,一条SQL语句为了获取数据可以有几十甚至上百种执行计划,数据库会通过优化器选择更优的SQL执行计划,但是MySQL在执行计划上远远落后于商业数据库,甚至在一些方面相比PostgreSQL也差很多,那么怎么写出正确的SQL语句,避免MySQL选择错误的执行计划,以及怎样通过增加索引、设置参数让MySQL的执行计划更优,这就是优化SQL语句需要关心的事情。
最后,数据库的性能优化最有效的是架构的优化。对于读多写少的应用程序,可以设计为读写分离,把允许延迟的读请求主动分发到备库;对于秒杀型的业务,可以先在内存型key-value存储系统筛选再发往数据库持久化,避免对数据库的冲击;对于汇总、聚合类的应用,可以采用列式存储引擎或者专门的大数据平台;对于监控类的应用,可以采用时序数据库,等等。
以上三种优化思路贯穿本书,这也是本书名为《千金良方:MySQL性能优化金字塔法则》的缘由。
机械思维和大数据思维
看过吴军博士《智能时代:大数据与智能革命重新定义未来》的人可能会对本书嗤之以鼻,本书的性能优化方法论还是工业革命时代的机械思维,简而言之,就是寻找因果关系,大胆假设,小心求证。“现在都是信息时代了,了解过信息论没有?知道香农第一定律和第二定律吗?解决问题需要用大数据思维!”
笔者有两点理由使用机械思维来介绍数据库性能优化:
(1)大数据时代需要的数据量大、多纬度和完备性,目前对数据库的性能优化和性能诊断,笔者掌握的案例和相关信息远远达不到大数据的要求。我们可以期待亚马逊、阿里云或者腾讯云等厂商或者专业的数据库公司(如Oracle、MariaDB等)来有针对性地做一些大数据数据库性能优化的尝试。
(2)大数据的成本很高。目前我们遇到的大部分性能问题其实用因果关系和假设→推导→再假设→再推导的方法就可以解决,不需要用到大数据、人工智能这样的“大杀器”。
内容介绍
MySQL的火热程度有目共睹,如果需要了解MySQL的安装、启动、配置等基础知识,市面上相关的书籍已是汗牛充栋。本书则尽量深入细致地介绍MySQL的基本原理,以及性能优化的实际案例。
基本原理很枯燥,就像课堂上老师介绍数学定理和公式推导一样,有人可能会质疑,小学都在进行素质教育了,你这本书里怎么还有那么多基本原理的介绍?对于工作了两三年的技术人员来说,在实践上已经有了比较多的积累,解决过很多问题——可能通过sys schema查询事务锁等待解决了系统的并发问题,通过设置ulimit -n 扩大进程文件句柄数解决了MySQL的进程限制问题,通过设计读写分离架构扩展了应用的读性能线性扩展问题。但是作为求知欲强的技术人员,我们急切地希望知其所以然,了解MySQL到底是怎么设计的,以及为什么这样设计,sys schema到底还有哪些可以帮助我们分析解决问题的存储过程,Linux系统的资源限制除了ulimit还有哪些,读写分离架构适应的场景有哪些,什么时候建议用分库分表,等等。如果你也跟我们一样,你应该阅读本书。
本书一共分为3篇:基础篇、案例篇和工具篇。
信息论认为消除一件事情的不确定性就是获取足够多的信息。我们认为任何优化都可以从了解它的基本原理和设计思路开始。“基础篇”从理论基础和基本原理层面介绍了MySQL的安装与配置、升级和体系结构,information_schema、sys_schema、performance_schema和mysql_schema,MySQL复制,MySQL事务,SQL语句优化及架构设计基础知识。希望读者通过对这些内容的学习,能够深入细致地了解MySQL各方面的基础知识。
计算机是一种实验的科学,性能优化是实战的艺术。“案例篇”从硬件和系统、MySQL架构等方面给出了性能优化的十几个案例,包括:性能测试的基本优化思路和最需要关注的性能指标解释、对日常SQL语句执行慢的基本定位、避免x86可用性的一般性方法、节能模式会怎样影响性能、I/O存储作为数据库最重要的依赖是如何影响数据库性能的、主备复制不一致可能有哪些原因、字符集不一致会造成哪些性能问题、在实际场景中锁的争用是怎样的。希望读者通过这些案例,可以深入细致地理解“基础篇”中的各种概念,融会贯通,对MySQL有一个全面的、系统的掌握。
“工欲善其事,必先利其器。”我们日常需要借助一些工具来做性能优化。“工具篇”介绍了在MySQL性能优化过程中需要用到的各种工具,包括:dmidecode、top、dstat等硬件和系统排查工具;FIO、sysbench、HammerDB等压力测试工具;mysqldump、XtraBackup等备份工具;Percona、innotop、Prometheus等监控工具。希望读者可以借助更多自动化的方式去验证和评估性能优化解决方案,提升性能。
读者对象
(1)MySQL初学者。建议按照顺序从本书的“基础篇”开始阅读。“基础篇”介绍了从安装部署、基础配置到性能诊断等日常工作需要了解的内容。在熟悉了MySQL的基本概念和大致原理以后,在阅读“案例篇”时,对问题的定义和解决方案才能理解得更加透彻。最后在阅读“工具篇”时,也可以学习到MySQL DBA日常工作所需要工具的使用方法和应用场景。
(2)专门从事MySQL工作1~3年的开发人员和运维人员。对于有一些MySQL开发和运维经验的人员,建议先跳过“基础篇”,直接从“案例篇”开始阅读。在“案例篇”中了解了具体的问题现象、故障处理的过程和方法以后,联系案例中对应的“基础篇”和“工具篇”知识进行阅读,这样能帮助你把很多知识点串联起来,由点到面形成更为全面的MySQL知识体系。
(3)资深的MySQL DBA。本书可以作为案头书,在解决问题时,如果记不清某些概念或者细节比较模糊,则可以拿来参考。
致谢
首先,感谢我的叔叔李巍,从一个贫家子弟到自己创业成立公司,到成为上市公司CEO,再到成立基金公司,他让我看到一个人的能力可以改变环境,让更多的人发挥自己的价值,也是他的经历激励着我继续努力。
其次,感谢阿里巴巴平台,在实际的工作中,这些之前一起奋斗过和现在正在一起奋斗的战友都给了我极大的帮助,他们是简朝阳、彭立勋、胡中泉、陈良允、陈栋、张瑞、熊中哲、何登成、梅庆、童家旺、李建辉、罗春、胜通、天羽、苏普等(排名不分先后)。
再次,感谢沃趣科技技术中心的负责人魏兴华,因为他的鼓励才有了这本书,感谢产品团队的负责人张文件、MySQL团队的同事刘云和沈刚帮助校稿,感谢市场部的同事杨雄飞、钱怡晨协调出版相关事宜。还要感谢其他在沃趣团队工作中一起成长的同学们,人数太多,这里就不一一提及了。
最后,感谢电子工业出版社的符隆美编辑大力配合我们推动图书的出版事宜。
本书作者
本书由李春、罗小波、董红禹共同编写,其中,李春负责编写第23~33章、第42~44章,罗小波负责编写第1~18章、第40~41章、第45~51章,董红禹负责编写第19~22章、第34~39章。
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
• 下载资源:本书提供资源文件,均可在 下载资源 处下载。
• 提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
• 交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/37520

编者

目录

基 础 篇
第1章 MYSQL初始化安装、简单安全加固 3
1.1 背景 3
1.2 初始化安装 3
1.2.1 下载二进制安装文件 3
1.2.2 创建MYSQL用户 3
1.2.3 创建程序、数据存放目录 4
1.2.4 解压缩二进制安装文件并设置目录权限 4
1.2.5 软链接程序路径,并设置MYSQL命令环境变量 5
1.2.6 配置MY.CNF文件参数 5
1.2.7 初始化MYSQL 6
1.2.8 启动MYSQL 7
1.3 简单安全加固 8
1.3.1 登录MYSQL 8
1.3.2 删除非ROOT或非LOCALHOST的用户并修改ROOT密码 9
1.3.3 删除TEST库,清理MYSQL.DB表 10
1.4 创建用户、库、表、数据 12
1.4.1 创建管理用户并授权 12
1.4.2 创建库、表、程序账号 13
1.4.3 插入数据 14
1.5 MYSQL参数模板 16
第2章 MYSQL常用的两种升级方法 21
2.1 背景 21
2.2 MYSQL 5.5.54的安装 21
2.3 升级MYSQL 5.5.54到MYSQL 5.6.35 21
2.3.1 使用MYSQL_UPGRADE直接升级数据字典库 21
2.3.2 使用MYSQLDUMP逻辑备份数据 30
2.4 升级注意事项 38
第3章 MYSQL体系结构 41
3.1 快速安装MYSQL 41
3.2 数据目录结构 43
3.3 MYSQL SERVER体系结构 46
3.4 MYSQL中的存储引擎 48
3.5 INNODB存储引擎体系结构 48
3.6 INNODB存储引擎后台线程 52
3.7 MYSQL前台线程 54
第4章 PERFORMANCE_SCHEMA初相识 56
4.1 什么是PERFORMANCE_SCHEMA 56
4.2 PERFORMANCE_SCHEMA使用快速入门 57
4.2.1 检查当前数据库版本是否支持 57
4.2.2 启用PERFORMANCE_SCHEMA 58
4.2.3 PERFORMANCE_SCHEMA表的分类 59
4.2.4 PERFORMANCE_SCHEMA简单配置与使用 62
第5章 PERFORMANCE_SCHEMA配置详解 66
5.1 编译时配置 66
5.2 启动时配置 67
5.2.1 启动选项 67
5.2.2 SYSTEM VARIABLES 69
5.3 运行时配置 71
5.3.1 PERFORMANCE_TIMERS表 71
5.3.2 SETUP_TIMERS表 72
5.3.3 SETUP_CONSUMERS表 73
5.3.4 SETUP_INSTRUMENTS表 76
5.3.5 SETUP_ACTORS表 82
5.3.6 SETUP_OBJECTS表 85
5.3.7 THREADS表 87
第6章 PERFORMANCE_SCHEMA应用示例荟萃 93
6.1 利用等待事件排查MYSQL性能问题 93
6.2 锁问题排查 97
6.2.1 找出谁持有全局读锁 97
6.2.2 找出谁持有MDL锁 100
6.2.3 找出谁持有表级锁 104
6.2.4 找出谁持有行级锁 107
6.3 查看最近的SQL语句执行信息 112
6.3.1 查看最近的TOP SQL语句 112
6.3.2 查看最近执行失败的SQL语句 114
6.4 查看SQL语句执行阶段和进度信息 117
6.4.1 查看SQL语句执行阶段信息 117
6.4.2 查看SQL语句执行进度信息 120
6.5 查看最近的事务执行信息 121
6.6 查看多线程复制报错详情 123
第7章 SYS系统库初相识 126
7.1 SYS系统库使用基础环境 126
7.2 SYS系统库初体验 127
7.3 SYS系统库的进度报告功能 129
第8章 SYS系统库配置表 132
8.1 SYS_CONFIG表 132
8.2 SYS_CONFIG_INSERT_SET_USER触发器 136
8.3 SYS_CONFIG_UPDATE_SET_USER触发器 136
第9章 SYS系统库应用示例荟萃 138
9.1 查看慢SQL语句慢在哪里 138
9.2 查看是否有事务锁等待 140
9.3 查看是否有MDL锁等待 141
9.4 查看INNODB缓冲池中的热点数据有哪些 143
9.5 查看冗余索引 144
9.6 查看未使用的索引 145
9.7 查询表的增、删、改、查数据量和I/O耗时统计信息 145
9.8 查看MYSQL磁盘文件产生的磁盘流量与读写比例 146
9.9 查看哪些语句使用了全表扫描 147
9.10 查看哪些语句使用了文件排序 148
9.11 查看哪些语句使用了临时表 149
第10章 INFORMATION_SCHEMA初相识 151
10.1 什么是INFORMATION_SCHEMA 151
10.2 INFORMATION_SCHEMA组成对象 153
10.2.1 SERVER层的统计信息字典表 153
10.2.2 SERVER层的表级别对象字典表 154
10.2.3 SERVER层的混杂信息字典表 155
10.2.4 INNODB层的系统字典表 156
10.2.5 INNODB层的锁、事务、统计信息字典表 157
10.2.6 INNODB层的全文索引字典表 158
10.2.7 INNODB层的压缩相关字典表 160
第11章 INFORMATION_SCHEMA应用示例荟萃 161
11.1 使用SERVER层的字典表查询相关的元数据信息 161
11.1.1 查看数据库中是否使用了外键 161
11.1.2 查看INNODB表空间文件信息 162
11.1.3 查看索引的统计信息 165
11.1.4 查看表的字段相关信息 166
11.1.5 查看数据库中是否使用了存储程序 167
11.1.6 查看数据库中的分区表信息 168
11.1.7 查看数据库中的触发器 169
11.1.8 查看数据库中的计划任务 170
11.1.9 查看客户端会话的状态信息 172
11.2 使用INNODB层的字典表查询相关的元数据信息 173
11.2.1 查看索引列的信息 173
11.2.2 查看表的字段相关信息 175
11.2.3 查看事务锁等待信息 176
11.2.4 查看INNODB缓冲池中的热点数据有哪些 176
第12章 MYSQL系统库之权限系统表 177
12.1 USER 177
12.2 DB 179
12.3 TABLES_PRIV 180
12.4 COLUMNS_PRIV 181
12.5 PROCS_PRIV 182
12.6 PROXIES_PRIV 182
第13章 MYSQL系统库之访问权限控制系统 184
13.1 访问权限控制系统概述 184
13.2 MYSQL提供了哪些权限 185
13.3 MYSQL账号命名规则 191
13.4 MYSQL账号访问控制两阶段 192
13.4.1 第一阶段(账号和密码认证) 192
13.4.2 第二阶段(权限检查) 196
13.5 权限变更的影响 197
13.6 MYSQL常见连接问题 198
第14章 MYSQL系统库之统计信息表 200
14.1 统计信息概述 200
14.2 统计信息表详解 203
14.2.1 INNODB_TABLE_STATS 203
14.2.2 INNODB_INDEX_STATS 204
第15章 MYSQL系统库之复制信息表 206
15.1 复制信息表概述 206
15.2 复制信息表详解 207
15.2.1 SLAVE_MASTER_INFO 207
15.2.2 SLAVE_RELAY_LOG_INFO 209
15.2.3 SLAVE_WORKER_INFO 211
15.2.4 GTID_EXECUTED 215
15.2.5 NDB_BINLOG_INDEX 217
第16章 MYSQL系统库之日志记录表 218
16.1 日志信息概述 218
16.2 日志表详解 220
16.2.1 GENERAL_LOG 220
16.2.2 SLOW_LOG 223
第17章 MYSQL系统库应用示例荟萃 228
17.1 查看用户不同作用域的权限 228
17.1.1 查看全局权限 228
17.1.2 查看库级别权限 230
17.1.3 查看表级别权限 232
17.1.4 查看字段级别权限 234
17.2 查看统计信息 236
17.2.1 查看表统计信息 236
17.2.2 查看索引统计信息 236
17.3 查看SQL日志信息 237
第18章 复制技术的演进 245
18.1 复制格式概述 245
18.2 基于数据安全的复制技术演进 246
18.2.1 异步复制 246
18.2.2 半同步复制 247
18.2.3 增强半同步复制 249
18.2.4 组复制 250
18.2.5 GTID复制 253
18.3 基于复制效率的复制技术演进 255
18.3.1 单线程复制 255
18.3.2 DATABASE 并行复制 256
18.3.3 LOGICAL_CLOCK 并行复制 258
18.3.4 WRITESET并行复制 260
第19章 事务概念基础 263
19.1 4种事务隔离级别和3种异常现象 263
19.1.1 标准的事务隔离级别 263
19.1.2 调整事务隔离级别 264
19.2 从事务提交谈起 265
19.2.1 事务管理 265
19.2.2 数据库中的文件 266
19.2.3 WAL日志先写 266
19.3 MYSQL中的REDO日志 267
19.3.1 REDO日志落盘时间点 267
19.3.2 REDO日志格式 267
19.3.3 相关参数及概念 269
19.3.4 CHECKPOINT概念 269
19.3.5 REDO日志的设置 271
19.3.6  REDO日志与BINLOG协调工作 273
19.4 MVCC介绍 274
19.4.1 MVCC原理 274
19.4.2 具体代码 276
第20章 INNODB锁 280
20.1 INNODB锁概述 280
20.1.1 INNODB锁分类 280
20.1.2 行锁 280
20.1.3 表锁 281
20.1.4 锁模式对应的含义 282
20.2 加锁验证 282
20.2.1 REPEATABLE-READ隔离级别+表无显式主键和索引 283
20.2.2 REPEATABLE-READ隔离级别+表有显式主键但无索引 286
20.2.3 REPEATABLE-READ隔离级别+表无显式主键但有索引 288
20.2.4 REPEATABLE-READ隔离级别+表有显示主键和索引 291
20.2.5 READ-COMMITTED隔离级别+表无显式主键和索引 293
20.2.6 READ-COMMITTED隔离级别+表有显式主键无索引 295
20.2.7 READ-COMMITTED隔离级别+表无显式主键有索引 295
20.2.8 READ-COMMITTED隔离级别+表有显式主键和索引 296
第21章 SQL优化 299
21.1 SQL优化基础概念 299
21.2 MYSQL中的JOIN算法 303
21.3 MYSQL中的优化特性 305
第22章 MYSQL读写扩展 308
22.1 分布式架构概述 308
22.2 分库分表两种方式 309
22.2.1 中间件方式 309
22.2.2 客户端方式 309
22.2.3 客户端方式与中间件方式不同 310
22.2.4 分库与分表 310
22.3 中间件工作方式及原理 310
22.4 架构设计及业务场景 312
22.4.1 读写扩展案例 312
22.5 关于中间件的一些限制解释 314
22.5.1 跨库查询、复杂的SQL语句支持 314
22.5.2 分布式事务 314
案 例 篇
第23章 性能测试指标和相关术语 317
23.1 测试目标分类 317
23.1.1 已知故障信息采集 317
23.1.2 预估压力评测 317
23.2 性能测试指标 318
23.2.1 数据库性能通用“切口” 318
23.2.2 测试通用术语 319
23.2.3 示例 320
23.3 本章小结 321
第24章 历史问题诊断和现场故障分析 322
24.1 故障分析和验证 322
24.1.1 历史问题排查 322
24.1.2 在线问题分析 323
24.2 故障复现排查 323
24.3 本章小结 325
第25章 性能调优金字塔 326
25.1 硬件和系统调优 327
25.1.1 硬件优化 327
25.1.2 系统优化 327
25.2 MYSQL调优 328
25.2.1 参数调优 328
25.2.2 SQL/索引调优 329
25.3 架构调优 329
25.4 本章小结 329
第26章 SQL语句执行慢真假难辨 330
26.1 概述 330
26.2 测试环境 331
26.3 采集数据包 331
26.3.1 采集应用服务器数据包 331
26.3.2 采集数据库服务器数据包 332
26.4 解析数据包 333
26.4.1 使用WIRESHARK解析数据包 333
26.4.2 使用TCPDUMP解析数据包 335
26.5 本章小结 337
第27章 如何避免三天两头换硬盘、内存、主板 338
27.1 概述 338
27.2 服务器标准化 338
27.3 上线前烤机 339
27.3.1 STRESS 339
27.3.2 FIO 341
27.3.3 数据库烤机 341
27.4 本章小结 341
第28章 每隔45天的MYSQL性能低谷 342
28.1 存储知识小普及 342
28.1.1 MYSQL存储系统要求 342
28.1.2 存储系统软件层 343
28.1.3 存储系统硬件层 343
28.2 每隔45天的性能抖动 344
28.3 影响I/O性能的三种RAID策略 348
28.3.1 电池充放电 348
28.3.2 巡读 354
28.3.3 一致性检查 356
28.4 本章小结 358

第29章 MYSQL连接无法自动释放 359
29.1 环境配置 359
29.2 问题现象 359
29.3 诊断分析 359
29.4 解决方案 362
29.5 本章小结 362
第30章 查询MYSQL偶尔比较慢 363
30.1 环境配置 363
30.2 问题现象 363
30.3 诊断分析 363
30.4 选择VIP还是DNS访问MYSQL 364
30.4.1 VIP之殇 364
30.4.2 DNS之痛 365
30.4.3 VIP切换还是DNS切换 365
30.5 CPU节能模式 365
30.6 本章小结 366
第31章 MYSQL最多只允许214个连接 367
31.1 环境配置 367
31.2 故障现象 367
31.3 故障分析 367
31.4 解决方案 370
31.5 MYSQL最大连接数为214的源码解析 370
31.6 LINUX资源限制 371
31.6.1 资源拆分和组合 371
31.6.2 进程资源限制 372
31.6.3 MYSQL内部资源限制 374
31.7 本章小结 374
第32章 MYSQL挂起诊断思路 375
32.1 环境配置 375
32.2 问题现象 375
32.3 诊断分析 376
32.4 挂起时先做什么 377
32.5 总结 377
第33章 硬件和系统调优 378
33.1 硬件和系统调优概览 378
33.1.1 I/O:MYSQL 80%的性能瓶颈所在 378
33.2 CPU 384
33.3 网络 384
33.4 其他 385
33.5 总结 386
第34章 并发删除数据造成死锁 387
34.1 现象描述 387
34.2 如何阅读死锁日志 388
34.3 表结构及操作步骤 390
34.4 总结 390
第35章 删除不存在的数据造成死锁 391
35.1 现象描述 391
35.2 问题分析 392
35.3 问题扩展 392
35.4 表结构及操作步骤 393
35.5 总结 393
第36章 插入意向锁死锁 394
36.1 现象描述 394
36.2 问题分析 395
36.3 总结 397
第37章 分页查询优化 398
37.1 现象描述 398
37.2 优化方案 398
第38章 子查询优化——子查询转换为连接 400
38.1 现象描述 400
38.2 优化方案 401

第39章 子查询优化——使用DELETE删除数据 403
39.1 现象描述 403
39.2 优化方案 403
工 具 篇
第40章 硬件规格常用查看命令详解 407
40.1 通用命令 407
40.1.1 LSHW 407
40.1.2 DMIDECODE 414
40.1.3 DMESG 419
40.2 CPU相关命令 420
40.3 磁盘相关命令 422
40.3.1 SMARTCTL 422
40.3.2 LSSCSI 424
40.4 网卡相关命令 426
40.4.1 LSPCI 426
40.4.2 ETHTOOL 428
40.5 HCA卡相关命令 430
第41章 系统负载常用查看命令详解 433
41.1 TOP 433
41.1.1 命令行选项 433
41.1.2 交互式命令选项 434
41.1.3 输出结果解读 434
41.2 DSTAT 436
41.2.1 命令行选项 436
41.2.2 输出结果解读 438
41.3 MPSTAT 442
41.3.1 命令行选项 443
41.3.2 输出结果解读 443
41.4 SAR 444
41.4.1 命令行选项 444
41.4.2 输出结果解读 446
41.5 VMSTAT 453
41.5.1 命令行选项 453
41.5.2 输出结果解读 453
41.6 IOSTAT 455
41.6.1 命令行选项 455
41.6.2 输出结果解释 456
41.7 FREE 458
41.7.1 命令行选项 459
41.7.2 输出结果解读 459
41.8 IOTOP 460
41.8.1 命令行选项 461
41.8.2 交互式命令选项 461
41.8.3 输出结果解读 461
41.9 IFTOP 463
41.9.1 命令行选项 463
41.9.2 交互式命令选项 463
41.9.3 输出结果解读 464
41.10 IPERF 465
41.10.1 命令行选项 466
41.10.2 输出结果解读 467
第42章 FIO存储性能压测 469
42.1 安装FIO 469
42.2 测试I/O性能 470
42.2.1 随机写 470
42.2.2 顺序写 470
42.2.3 随机读 471
42.2.4 顺序读 471
42.2.5 混合随机读写 471
42.2.6 FIO配置文件测试 471
42.3 参数和结果详解 472
42.3.1 关键参数解释 472
42.3.2 配置文件 473
42.3.3 结果解析 475
42.4 FIO测试建议 476
42.5 课外阅读 476
第43章 HAMMERDB在线事务处理测试 477
43.1 安装和配置HAMMERDB 477
43.1.1 下载安装包 477
43.1.2 安装HAMMERDB 477
43.1.3 安装HAMMERDB GUI依赖包 478
43.2 测试 481
43.3 课外阅读 492
第44章 SYSBENCH数据库压测工具 493
44.1 安装SYSBENCH 493
44.1.1 YUM安装 493
44.1.2 RPM包安装 493
44.1.3 编译安装 494
44.1.4 验证安装是否成功 494
44.2 测试案例 494
44.2.1 造数 495
44.2.2 数据库读写测试 495
44.2.3 清理 496
44.3 SYSBENCH 参数详解 496
44.3.1 SYSBENCH命令语法 496
44.3.2 OPTIONS 496
44.3.3 TESTNAME 500
44.3.4 COMMAND 502
44.4 数据库测试输出信息详解 502
44.4.1 输出结果概述 503
44.4.2 版本及关键测试参数输出 504
44.4.3 中间统计结果输出 504
44.4.4 整体统计结果输出 504
44.5 课外阅读 505
第45章 MYSQLADMIN和INNOTOP工具详解 506
45.1 MYSQLADMIN 506
45.1.1 命令行选项 506
45.1.2 实战演示 511
45.2 INNOTOP 513
45.2.1 安装INNOTOP 513
45.2.2 命令行选项 514
45.2.3 交互式选项 515
45.2.4 实战演示 516
第46章 利用PROMETHEUS+GRAFANA 搭建炫酷的MYSQL监控平台 524
46.1 安装PROMETHEUS 525
46.1.1 下载程序包 525
46.1.2 解压缩程序包 526
46.1.3 启动PROMETHEUS 527
46.2 安装GRAFANA 529
46.2.1 下载程序包 529
46.2.2 解压缩程序包 530
46.2.3 启动GRAFANA 530
46.2.4 在GRAFANA中导入GRAFANA-DASHBOARDS 531
46.3 监控节点部署 534
46.3.1 添加主机监控 534
46.3.2 添加MYSQL监控 535
46.3.3 监控DASHBOARD切换 536
第47章 PERCONA TOOLKIT常用工具详解 538
47.1 PT-QUERY-DIGEST 538
47.1.1 命令行选项 538
47.1.2 实战演示 550
47.2 PT-IOPROFILE 558
47.2.1 命令行选项 558
47.2.2 实战演示 559
47.3 PT-INDEX-USAGE 560
47.3.1 命令行选项 561
47.3.2 实战演示 563
47.4 PT-DUPLICATE-KEY-CHECKER 566
47.4.1 命令行选项 567
47.4.2 实战演示 568
47.5 PT-MYSQL-SUMMARY/PT-SUMMARY 571
47.5.1 PT-MYSQL-SUMMARY 571
47.5.2 PT-SUMMARY 578
47.6 PT-PMP 584
47.6.1 命令行选项 585
47.6.2 实战演示 585
47.7 PT-STALK 587
47.7.1 命令行选项 588
47.7.2 实战演示 591
47.8 PT-SIFT 594
47.8.1 命令行选项 595
47.8.2 实战演示 595
第48章 MYSQL主流备份工具之MYSQLDUMP详解 598
48.1 简介 598
48.2 原理 599
48.3 命令行选项 601
48.3.1 连接选项 601
48.3.2 文件选项 602
48.3.3 DDL选项 603
48.3.4 调试选项 604
48.3.5 帮助选项 604
48.3.6 国际化选项——与字符集相关的选项 604
48.3.7 复制选项 605
48.3.8 输出格式化选项 607
48.3.9 过滤选项 609
48.3.10 性能选项 612
48.3.11 事务选项 612
48.3.12 组合选项 614
48.4 实战演示 614
48.4.1 完全备份与恢复 614
48.4.2 增量备份与恢复 616
48.4.3 搭建主从复制架构 616
48.4.4 克隆从库 618
48.4.5 指定库表备份与恢复 619
48.4.6 纯文本备份与恢复 621
第49章 MYSQL主流备份工具之XTRABACKUP详解 624
49.1 简介 624
49.2 原理 624
49.3 命令行选项 633
49.4 实战演示 644
49.4.1 完全备份与恢复 644
49.4.2 增量备份与恢复 645
49.4.3 基于时间点的恢复 649
49.4.4 搭建主从复制架构 657
49.4.5 克隆从库 659
第50章 MYSQL主流备份工具之MYDUMPER详解 662
50.1 简介 662
50.2 原理 662
50.3 命令行选项 664
50.3.1 MYDUMPER 664
50.3.2 MYLOADER 666
50.4 实战演示 667
50.4.1 安装MYDUMPER 667
50.4.2 备份与恢复 669
第51章 MYSQL主流闪回工具详解 675
51.1 闪回工具科普 675
51.2 BINLOG2SQL 676
51.2.1 安装和使用要求 676
51.2.2 命令行选项 677
51.2.3 实战演示 678
51.2.4 使用限制与注意事项 690
51.3 MYFLASH 690
51.3.1 安装MYFLASH 691
51.3.2 命令行选项 691
51.3.3 实战演示 692

本书勘误

印次
  • 页码:76  •  行数:9  •  印次: 1

    76页,UPDATE setupconsumers SET ENABLED =’NO’ WHERE NAME =’events waits_current’;语句中的”NO”修改为”YES”

    xiaoboluo768 提交于 2019/11/4 15:51:45
    符隆美 确认于 2019/11/18 10:12:48
  • 页码:261  •  行数:4  •  印次: 1

    正文第4行,

    last_committed=9
    应为
    last_committed=8

    严少安 提交于 2020/2/15 14:22:20
    张春雨 确认于 2020/3/23 14:00:54
  • 页码:332  •  行数:1  •  印次: 1

    tcpdump -s 0 -w /tmp/client_3306.pcap —host 10.10.30.161 and port 3306应该修改为
    tcpdump -s 0 -w /tmp/client_3306.pcap — host 10.10.30.161 and port 3306
    —和host之间应该有一个空格,—表示该字符后面没有参数了,host 后面跟IP地址表示监听发往或者从该IP发出的package。

    李春 提交于 2019/11/6 10:59:11
    符隆美 确认于 2019/11/18 10:12:36
  • 页码:471  •  行数:13  •  印次: 1

    这里用8个线程对/data2/test1文件做持续时间为60s、队列深度为1、块大小为4k的direct异步顺序读(libaio)压力测试,该测试命名为bw_read。输出结果不按4个job分别展示,而是按照 group 汇总。这样就可以得到在该压力下该文件系统的顺序读带宽

    应该修改为

    这里用8个线程对/data2/test1文件做持续时间为60s、队列深度为1、块大小为1m的direct异步顺序读(libaio)压力测试,该测试命名为bw_read。输出结果不按8个job分别展示,而是按照 group 汇总。这样就可以得到在该压力下该文件系统的顺序读带宽

    李春 提交于 2019/11/14 17:49:34
    符隆美 确认于 2019/11/18 10:10:58
  • 页码:471  •  行数:24  •  印次: 1

    这里用8个线程对/data2/test1文件做持续时间为60s、队列深度为1、块大小为16k的direct异步混合随机读写(libaio)压力测试,读写比为7∶3,该测试命名为iops_randrw。输出结果不按4个job分别展示,而是按照 group 汇总。这样就可以得到在该压力下该文件系统的混合随机读写IOPS。

    修改成

    这里用8个线程对/data2/test1文件做持续时间为60s、队列深度为1、块大小为16k的direct异步混合随机读写(libaio)压力测试,读写比为7∶3,该测试命名为iops_randrw。输出结果不按8个job分别展示,而是按照 group 汇总。这样就可以得到在该压力下该文件系统的混合随机读写IOPS。

    李春 提交于 2019/11/14 17:57:01
    符隆美 确认于 2019/11/18 10:10:09

读者评论

  • 这本书更多适合DBA,奈何我一个开发人员买了,看得云里雾里(可能是水平实在不够吧)。PS:50包邮出此书。

    justdingqh发表于 2020/3/13 15:36:00
  • 第47页, 倒数第 8 行:
    在连接者组件层创建连接, 分配线程, 并验证 ….
    应该是 连接池 组件吧

    ouer1994发表于 2019/11/25 11:38:21
    • 谢谢您的反馈,我们会在重印时修改。

      符隆美发表于 2019/11/25 14:00:30

图书类别

相关博文

  • 解读MySQL性能调优“金字塔”

    解读MySQL性能调优“金字塔”

    管理员账号 2019-10-22

    计算机是一种实验的科学 性能优化是实战的艺术 蒸汽机的改进不是一蹴而就的,MySQL性能的改进也是贯穿整个MySQL发展史的。MySQL之父Monty在1981年写了MySQL的第一行代码以后,在开源的帮助下MySQL成长为目...

    管理员账号 2019-10-22
    174 0 0 0

相关图书

数据分析与量化投资——基于SAS的应用

林煜恩 (作者)

本书基于SAS EG平台下,采用项目管理的过程流方式来介绍数据分析以及量化投资策略方法,书中提供了作者撰写的autoexec命令文件,可让SAS在运行时,就自带...

 

DBA 手记——Oracle 数据安全的警示与原则

盖国强 (作者)

本书以数据安全为主线将众多灾难挽救过程串联在一起,不仅对各个案例的发生过程进行了详细描述,更为读者提供了具体的规避法则。其间穿插介绍了很多新鲜的技术细节和恢复方...

¥99.00

收获,不止Oracle(第2版)

梁敬彬 (作者)

在这本书里,读者将会跟随作者一同对Oracle数据库的相关知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、优化、设计人员,还是从...

¥99.00

MySQL王者晋级之路

张甦 (作者)

目前大部分软件开发平台都基于Linux,很多互联网公司都把MySQL作为后端数据存储的数据库。如果把MySQL比喻成数据库界的一条巨龙,则本书涵盖的所有知识点就...

¥79.00

高性能SQL调优精要与案例解析

闫书清 (作者)

本书共分为两篇,基础篇(第1 章~第10 章)介绍了SQL 调优应该具备和掌握的理论和方法,<br>实践篇(第11 章)精选并深入解析了10 个现实中的实际案例...

¥69.00

Effective SQL:编写高质量SQL语句的61条有效方法(英文版)

John L. Viescas; Douglas J. Steele;Ben G. Clothier (作者) (译者)

本书全面系统地介绍了SQL语言各方面的基础知识以及一些高级特性,包括SQL数据语言、SQL方案语言、数据集操作、子查询以及内建函数与条件逻辑等内容。书中每个章节...