当前位置: 首页 > news >正文

几位阿里发布这份内部MySQL性能优化法则笔记

开篇必水

从计算机出现的第一天起,性能作为鞭策者就不断地促进计算机及系统的演进。从最开始的人工输入命令等待计算机执行,到利用批处理任务提升利用率,再到通过多进程和多线程并发来进一步提升效率,性能其实一直是计算机工程师想要努力去解决和改善的重要难题。

从某种程度来说,MySQL数据库性能优化的问题是--个并行的问题,归根结底是锁和资源争用的问题。举个例子:假设你要开-一个餐饮店,你需要取好店名,到工商局领取开业登记注册证书,到卫生防疫站申请卫生许可,到物价局进行物价审核,如果要卖酒,则需要到工商部门办理酒类经营许可证,到税务局办理税务登记,到银行开户,还需要找厨师、找洗碗工、找采购人员、找门面、协调店面转让、进行店面装修、做广告牌,等等。

上干货了

全书共分为三篇:基础篇,案例篇,工具篇,由于篇幅限制小编仅展示部分目录哦

第一篇:基础篇

基础篇的内容设计,旨在为大家普及一些在性能优化过程中可能使用到的MySQL基础知识。


第1章MySQL初始化安装、简单安全加固:从这里开始,我们开启了本书的第一个章节。为了方便后续演示,以及照顾一些基础较为薄弱的读者,我们决定在本书中加入安装MySQL的章节,请大家准备好一台Linux服务器,跟随本章内容进行同步操作。

ab27cd91676143e4bcff316d83650050.png
第2章MySQL常用的两种升级方法:本章将为大家介绍常用的两种MySQL升级方法,大家可以准备好一台Linux服务器,跟随本章内容进行同步操作。 

f046fdc62d974b77bf56bee3d08542c0.png
第3章MySQL体系结构:本章会从整体上简要介绍整个MySQL Server体 系是由哪些组件组成的,MySQL默认支持哪些存储引擎,我们常用的InoDB存储引擎又是由哪些组件组成的,以及各个组件的作用是什么,InnoDB存储引擎中有哪些后台线程,MySQL有哪些前台线程等内容。下面将以MySQL 5.7.20版本为例进行介绍。 

880e8c138c94488db06d4944e6eeabb8.png
第4章performance_ schema初相识:本章首先介绍什么是performance_ schema, 以及它能做什么;然后简单介绍如何快速上手使用performance_ schema的方法;最后简单介绍performance schema由哪些表组成,以及这些表的大致作用是什么。 

e8fcbbdf75c04f0d9c8aa919add9a6f1.png
第5章performance. schema配置详解:本章首先介绍编译时的配置选项,只对源码编译安装使用;然后详细介绍启动时配置,即在启动之前如何通过配置文件来持久化performance _schema的配置,主要介绍performance__schema的systemvariables (系统变量)、statusvariables (状态变量)和启动选项:最后详细介绍运行时配置,即在运行过程中如何动态配置performance_ schema, 主要介绍如何通过performance__schema中的配置表进行动态配置,以及这些配置表的字段含义、配置表中的配置项之间有什么关联等。 

2d46c126c1a443b98f61a2a6ec15bbe3.png
第6章performance schema应用示例荟萃:本章将介绍一些performance__schema应用示例,以方便大家能够快速了解如何使用performance_schema来排查常见的数据库性能问题。 

fffe5c232b5e40c08dfa65e20851b9fb.png
第7章sys系统库初相识:从本章开始的第7~9章,将为大家介绍什么是sys系统库,以及如何使用sys系统库来排查一些常见的数据库性能问题。 

095a2c8ab49f49e382fb9792f41280d3.png
第8章sys系统库配置表:本章将为大家介绍sys系统库 的配置表,以及配置表中每个配置项的用途。 

537a56d5f9974dcfb437e11def53d970.png
第9章sys系统库应用示例荟萃:本章就为大家介绍一些sys系统库应用示例,以便能够快速使用sys系统库来排查常见的数据库性能问题。 

562166d26f114f95ba22ba609ec01f5a.png
第10章information schema初相识:从本章开始的第10章和第11章,将为大家介绍什么是information_ schema, 以及如何使用information schema来查询一些在日常工作中所需的数据库信息。 

21aa5aa710984edb8cafddbdd68bbe54.png
第11章information schema应用示例荟萃:本章就为大家介绍一些information_schema系统库应用示例,以便能够快速使用information_schema中的相关统计信息来提高日常DBA工作的效率。 

4ab37e8fc84647dfa74aa3c4794c6436.png
第12章mysq|系统库之权限系统表:从本章开始的第12~17章,将为大家详细介绍mysql系统库。本章先介绍mysql 系统库中的权限系统表。 

9906701d848748958cc614a935fe573e.png
第13章mysq|系统库之 访问权限控制系统:本章将在第12章内容的基础上详细介绍MySQL的访问权限控制系统。 

eb344bf183c64a8aa9e0ee1228f55bc2.png
第14章mysq|系统库之统计信息表:在DBA的日常工作中,可能有时候会碰到明明有索引,但是却用不上的尴尬,这可能就是由于统计信息更新不够及时所导致的。那么,什么是统计信息?这些信息记录在哪里呢?本章我们将从统计信息表的角度来解答这个问题 

6d72515d767d4cd1aa6fd0a0fba980bf.png
第15章mysq|系统库之复制信息表:mysql系统库中的复制信息表就是用来持久化复制信息的,本章将会为大家详细介绍每一个复制信息表。 

dcd0b9cbdee94ff797cd3a0d1a2fb17a.png
第16章mysq|系统库之日志记录表:在mysql系统库中提供了slow_log和general_log两个CSV引擎表来保存这两种日志数据,这样就可以通过标准的SQL语句来对数据进行检索与过滤了。本章将会为大家详细介绍这两个表 

155613c8b8c243ffaab702ddb16ab575.png
第17章mysq|系统库应用示例荟萃:本章就介绍几个mysql系统库的日常应用示例,以便大家能够快速使用mysql系统库中的相关信息来处理数据库管理工作。 

2f48b98d53344551936ecf2bf1508478.png
第18章复制技术的演进:复制技术的演进实际上有两条路线,一条路线为基于数据安全的复制技术演进;另一条路线为基于复制效率的复制技术演进。在本章中,我们将针对这两条复制技术的演进路线分别进行介绍。 

48b8244ecde148da945984661ffcbeff.png
第19章事务概含基础:本章就将梳理事务隔离级别和异常现象,希望大家读完后对这部分内容不再混淆 

9154829fa49d4fd18731140576cc40f7.png
第20章InnoDB锁:这一章会对InnoDB锁进行详细的讲解,包括锁的类型、如何查看锁以及对各种锁的验证等 

7901ebf249da4f668afe55c12e9fb450.png
第21章SQL优化:本章能够帮助大家加深对MySQL中索引和Join算法的理解,可以结合本书中的执行计划和案例章节来阅读本章内容。 

ee77602e163b47bbbdbfad7ed2b79f8a.png
第22章MySQL读写扩展:本章将对MySQL中的读写扩展架构进行解释和分析,帮助尝试使用MySQL数据库的企业能够根据业务场景来选择合适的架构。 

49dabeb1bb2f43629241c118a39c2948.png
第二篇:案例篇 

本篇希望通过自底向上,从硬件和操作系统到MySQL参数/SQL语句的优化,再到架构设计.上的优化,向读者展示在实际的应用中存取数据,使用结构化数据、关系数据库时可以尝试的一些优化手段。

第23章性能测试指标和相关术语:本章首先会按照测试目标来分类介绍DBA日常测试的两种类型。而关于如何测试硬件或者系统的性能,以及如何测试MySQL的性能在此不做详细介绍,有兴趣的读者可以到“工具篇”中查看相关内容。本章最后将介绍DBA在性能优化、测试和比较时需要关注的性能指标。

ff69e47a0aeb422ab9531eb07031127d.png
第24章历史问题诊断和现场故障分析:本章主要介绍如何去分析、诊断问题,以及如何重现问题,让问题可追根溯源。 

34f2a8d8fc71425a88fd9a532819a9fd.png
第25章性能调优金字塔: 

3c2987792c9f4975accd98f2109a01d1.png
第26章SQL语句执行慢真假难辨:本章将介绍一种比较通用的判断SQL语句执行慢到底是不是数据库响应时间导致的方法来解决这个问题。 

97d2f99826654c299e3fd5cb6a3ad9a1.png
第27章如何避免三天两头换硬盘、 内存、主板:本章将介绍有什么办法可以减少数据库运行环中出现硬件故障的概率,通过文中的办法可以尽量避免由于硬件故障导致的数据库宕机的问题。 

413f0b4799a84ce2bd7a3511acf3f3ef.png
第28章每隔45天的MySQL性能低谷:本章将介绍数据库最核心依赖的操作系统I/O存储系统的相关知识,并通过RAID卡导致性能下降的案例介绍分析和解决I/O性能问题的一般方法。这对于绝大部分采用自有硬件搭建MySQL服务的DBA来说非常有参考意义 

14390e40175048358eecb3e108b25007.png
第29章MySQL连接无法自动释放:本章通过一个在MySQL中连接无法及时释放的例子引出操作系统网络超时对数据库的影响,为遇到网络问题的DBA提供相关思路。 

f082d3bea079405b934a5dca2a21f813.png
第30章查询MySQL偶尔比较慢:本章通过同一个客户网络和服务器性能优化的案例,展示了相对较复杂的情况下多因素导致数据库性能下降的场景和性能优化的方法,读者可以举一反三,对自己的环境进行优化和验证。 

d19ddd73ec6647ecafdbe78618ef0b00.png
第31章MySQL 最多只允许214个连接:本章通过从原理和源码级别解析MySQL经典的最大连接数为214的案例,引出操作系统资源限制的话题,并结合当前最火的云计算和容器技术介绍资源分布和组合趋势的相关思考 

c8b8883dcef84c1487bd2f096073f98a.png
第32章MySQL挂起诊断思路:本章通过MySQL性能陡降为0无法继续提供服务的案例介绍了在极端情况下的问题的解决思路和诊断方法,读者可以借鉴对应思路尽量缩减数据库故障时间。 

c7c47d674bd240c685634cf6d677b2f0.png
第33章硬件和系统调优:本章汇总了之前硬件或者操作系统对MySQL性能影响的相关因素并分类列出了从底层优化数据库性能的相关方法。 

e26e0038e7844383b4ec544ee3ebfeb2.png
第34章并发删除数据造成死锁:在第20章中讲解了MySQL中加锁的分析,我们还需要将这些理论知识运用到实际中。从本章开始将介绍几个死锁案例,下面我们先介绍如何查看MySQL中的死锁日志。 

dc4ffff9666049dcbd5ad137e86c9d79.png
第35章删除不存在的数据造成死锁:本章将通过一个案例来加深读者对RR隔离级别下加锁规则的理解,阅读死锁日志,能够将理论知识运用到实际中。 

2662cbc68c084352b2a2b5f8d388aa21.png
第36章插入意向锁死锁:本章介绍一种比较不常见的死锁现象,和我们通常理解的死锁发生过程不太一样,能使读者对死锁现象有新的理解。 

21e05ca99ac045a4bfc1b2dcfbb57a9c.png
第37章分页查询优化:分页查询是很常见的一种业务需求,因此,分页查询的性能问题就是我们需要重点关注的。本章案例中会介绍三种分页查询的写法,让大家能应对分页查询的性能问题 

3eeed4ab065744fe91fd5c2499d0c3c0.png
第38章子查询优化—— 子查询转换为连接:本章我们讲解几个子查询优化案例,让大家加深对子查询的印象。 

87ece450eda44d89b54b3c17442c5d3b.png
第39章子查询优化—— 使用delete删除数据:前面两章中的案例都是关于查询问题的,但是有时候我们在做删除、更新时同样会遇到性能问题,解决思路是相同的,本章讲解的就是一个删除数据时性能存在问题的案例。 

8ab81ebd9a854f96bbb2310ee27f9f8f.png
第三篇:工具篇 

第40章硬件规格常用查看命令详解:本章将对查看硬件规格的常用命令进行详细介绍,例如:可以查看CPU的型号和频率、内存的型号和频率、磁盘型号、网卡型号等。

这些工具命令由lshw、dmidecode、util-linux-ng、smartmontools、lsscsi、pciutils、ethtool等软件包提供,根据需要自行使用yum命令安装即可。例如:yum install lshw-y。

fda9de53065045228ce90e1c4563ae1b.png
第41章系统负载常用查看命令详解:本章将对在日常工作中常用的10个系统负载查看命令进行详细的介绍,这些命令由procps、sysstat、dstat、iftop、iotop、iperf 等软件包提供 

173dd753a1414a6ebb30707bd928a27d.png
第42章FIO存储性能压测:本章主要介绍存储性能压测(即压力测试)的利器FIO,包括如何安装FIO、如何使用FIO来测试设备的I/O性能、如何解读FIO测试的结果,以及如何模拟MySQL数据库进行I/O压力测试 

2ce77fd961704a23b7ee9e056bdc77ab.png
第43章HammerDB在线事务处理测试:本章主要介绍如何安装和配置HammerDB,并使用HammerDB对MySQL进行TPC-C压力测试。与HammerDB类似的工具有很多,例如tpcc-mysql,但是就使用方便性和易用性而言,HammerDB无疑更胜一筹。 

e0770a6b2a694affb347f4ad771dd180.png
第44章sysbench数据库压测工具:sysbench不仅可用于数据库基准测试,也可用于服务器的其他工作负载基准测试。本章主要以1.0版本为例介绍sysbench。在新的Release版本下,sysbench新增与优化了一些特性。 

7245b9ea9b824fab801525a17421f614.png
第45章mysqladmin和innotop工具详解 

427e5834a0db495fa63e42b484d91b84.png
第46章利用Prometheus + Grafana搭建炫酷的MySQL监控平台: 

b2ecbb10a66444e7a6c068ad48adb0c6.png
第47章Percona Toolkit常用工具详解:本章部分内容参考自Percona Toolkit 3.0.12用户手册。另外,本章只介绍可辅助性能排查的常用工具,如有其他需求,请自行查看Percona Toolkit 3.0.12用户手册。 

5e2a36f2f9b14b97908edc3f1ce3509b.png
第48章MySQL主流备份工具之mysqldump详解:在互联网发展的早期,数据量还不那么大时,由于它是免费的备份工具且支持远程备份,可以方便地进行备份部署,使得mysqldump迅速成为最流行的备份工具之一。本章我们将对mysqldump备份工具进行详细介绍。 

754323d9cc904e55b605b4fd718be2f8.png
第49章MySQL主流备份工 具之XtraBackup详解: 

88031bcb2b1c439ba0f20bc2902962d9.png
第50章MySQL主流备份工 具之mydumper详解:下面我们将对mydumper工具包中的mydumper和myloader命令进行详细介绍。 

6204b944a4244043a0b6abe698ab8171.png
第51章MySQL主流闪回工具详解:对于MySQL而言,目前有一些现成的开源闪回工具,完全不需要自己重复“造轮子”,其中使用得比较多的要数binlog2sql和flashback了,下面我们将对这两款主流的闪回工具进行详细介绍。 

479cf57ad58e4f59b526ede4be01ee19.png

相关文章:

  • java-php-python-ssm巢院小区疫情管控系统计算机毕业设计
  • Linux基础 - 系统安全(SELinux与Firewalld)
  • 学完这份“顶级”SpringCloudAlibaba笔记,微服务竟如此简单
  • Spring注解驱动开发及源码解析
  • 2.1RDB、AOF及混合持久化详解Redis持久化
  • matlab基于PID反馈的主动隔振效果仿真分析
  • 力扣记录:Hot100(8)——253-322
  • 模板 cdq分治解三维偏序
  • C++/Qt音视频通话开发MetaRTC源码解读,coturn穿透stun的使用
  • Spring读取配置文件
  • MySQL进阶第八天——innodb引擎
  • Easy Yapi插件使用详情
  • 迪士尼这部影片让我看到了AR观影的未来
  • FPGA学习笔记(二)Verilog初步入门
  • vue使用pinia (vue2/vue3)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 77. Combinations
  • CODING 缺陷管理功能正式开始公测
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript HTML DOM
  • Javascript Math对象和Date对象常用方法详解
  • quasar-framework cnodejs社区
  • React-生命周期杂记
  • Travix是如何部署应用程序到Kubernetes上的
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue 配置sass、scss全局变量
  • 每天一个设计模式之命令模式
  • 如何学习JavaEE,项目又该如何做?
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • linux 淘宝开源监控工具tsar
  • ​香农与信息论三大定律
  • ()、[]、{}、(())、[[]]命令替换
  • (12)目标检测_SSD基于pytorch搭建代码
  • (Java数据结构)ArrayList
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (南京观海微电子)——COF介绍
  • (算法)求1到1亿间的质数或素数
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • **CI中自动类加载的用法总结
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitignore
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 8.0 中有哪些新的变化?
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Standard 的管理策略
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .net中生成excel后调整宽度
  • /bin/rm: 参数列表过长"的解决办法
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @SuppressWarnings(unchecked)代码的作用