Skip to content

Commit 691fcdc

Browse files
committed
first commit
0 parents  commit 691fcdc

32 files changed

+313
-0
lines changed

README.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# MySQL8查询性能调优
2+
3+
*一种提高执行速度的系统方法*
4+
5+
6+
7+
## 介绍
8+
9+
该书是翻译自*MySQL 8 Query Performance Tuning*, 翻译过程持续进行中, 欢迎对mysql技术感兴趣的小伙伴加入其中。你可以是译者、审校或者提一些意见 我们一概欢迎。期待该书翻译工作完工!
10+
11+
12+
13+
## 资源
14+
15+
- [美国亚马逊购买链接](https://www.amazon.com/-/zh/MySQL-Query-Performance-Tuning-Systematic/dp/1484255836)
16+

介绍.md

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
MySQL 性能调优是一个非常大的主题,需要数年时间才能掌握。这本书的篇幅证明了这一点,即使范围缩小,专注于查询相关的主题。没有简单的提高性能的配方,通常需要了解不同部分之间的关系,不仅在MySQL内部,而且对于堆栈的其他部分。如果你觉得这是压倒性的开始,你远不是第一个,但不要绝望,因为它的性能调整一样与其他技能,练习使完美。
2+
3+
本书的目的是帮助您在提高 MySQL 实例上执行查询的性能方面获得良好的开端。正如所称,没有简单的配方,所以最好的方法就是了解性能调优所涉及的各种组件是如何工作的。这就是本书的大部分工作,以及给出寻找什么和如何执行共同任务的例子。另一方面,范围仅限于 MySQL 本身,因此对操作系统、文件系统和硬件级别的讨论非常有限。
4+
5+
MySQL 以其对存储引擎的支持而著名。但是,本书专门包含 InnoDB 存储引擎,但讨论内部临时表除外。对于 MySQL 版本,仅考虑 MySQL 8。也就是说,大多数讨论也适用于旧版本的 MySQL,一般来说,当 MySQL 8 中的功能是新功能或 MySQL 8 与旧版本相比,其行为不同时,也会提到该讨论。
6+
7+
## 目标读者
8+
9+
这本书是为开发人员和数据库管理员编写的,他们拥有使用 MySQL 的经验,希望将他们的知识扩展到性能优化领域。无需事先体验性能调优。
10+
11+
## 示例和该书GitHub仓库
12+
13+
我已尝试添加尽可能多的示例和输出示例。有些例子很短,有些则相当长。在这两种情况下,我希望你能够跟随他们,并重现效果或结果证明。同时,请牢记,从自然性质上来说,往往涉及随机性(有时甚至与索引统计一样,示例的确切结果可能取决于在示例之前如何使用表和数据。换句话说,即使你做的每件事都是正确的,你也可能得到不同的结果。这尤其适用于与索引统计信息、计时等相关的数字。
14+
15+
长或产生的长或宽的输出的 IExamp 已加到本书的 GitHub 存储库中。这包括一些可能硬是使用页面格式允许的图像大小读取的数字。指向存储库的链接可从位于此位置的www.apress.com/gp/book/9781484255834
16+
17+
一旦创建,GitHub 存储库也将是该书的勘误表的家。当 MySQL 8 中的 Bug 修复和新功能导致图书内容更改时,我不仅将使用勘误表来传达书中的错误,还将使用 toprovide 更新。如有必要,我还将更新存储库中的示例,以反映较新版本中行为。出于这些原因,我建议你留意存储库。
18+
19+
## 该书结构
20+
21+
待翻译
22+

关于作者.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**Jesper Wisborg Krogh** 自 2006 年作为 SQL 开发人员和数据库管理员与 MySQL 数据库合作,并在 8 年多一直是 TheOracle MySQL 支持团队的一员。他曾多次在 MySQLConnect 和 Oracle OpenWorld 上发言,除了他的著作外,他还经常撰写有关 MySQL 主题的博客,并在 Oracle 知识库中撰写了大约 800 份文档。他为 MySQL 5.6+8 的 sys 架构和四次 Oracle 认证专业 (OCP) 考试做出了贡献,在 2006 年与 MySQL 和其他软件开发合作之前,他获得了计算化学博士学位。Jesper 住在澳大利亚悉尼,喜欢在户外散步、旅行和阅读。他的专业领域包括 MySQL 群集、MySQL 企业备份 (MEB)、性能调优以及性能和系统架构。

关于技术审查员.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**查尔斯·贝尔**从事新兴技术的研究。他是 Oracle MySQL 开发团队的成员,也是 MySQL 企业备份团队的高级软件开发人员。他和爱的妻子住在维吉尼亚州农村的一个小镇上。他于2005年从弗吉尼亚联邦大学获得工程学博士学位,Charles是数据库领域的专家,在软件开发和系统工程方面拥有丰富的知识和经验。他的研究兴趣包括三维打印机/打印、微控制器、数据库系统、软件工程、高可用性系统、云和传感器网络。作为一名练习者,他利用有限的空闲时间,专注于微控制器项目和三维打印机的改进。

第1部分 入门/Chapter1.md

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# MySQL性能调优
2+
3+
欢迎来到 MySQL 性能调优的世界。这是一个世界,有时可以像它占主导地位的黑魔法和运气,但希望这本书可以帮助你以结构化的方式工作,有条不紊地工作的方式,以更好的表现。
4+
5+
本章通过讨论整个堆栈以及监视和基于数据的操作的重要性向您介绍 MySQL 性能调优。由于本书主要讨论查询,因此在结束本章之前将回顾查询的生命周期。
6+
7+
*如果您需要一个测试实例,无论是阅读本书时,还是为了处理工作中的问题,云都可以是你的朋友。它允许您快速启动测试实例。如果您只需要一个小实例,例如,在本书中探索示例,您甚至可以使用免费实例,例如通过 Oracle 云的免费套餐(仍然需要注册和信用卡):https://mysql.wisborg.dk/oracle_cloude_free_tier.*
8+
9+
## 考虑整个堆栈
10+
11+
调查性能问题时,必须考虑系统的所有部分,从最终用户到应用程序到 MySQL。当有人报告应用程序速度很慢,并且您知道 MySQL 是应用程序的核心部分时,很容易得出"MySQL 速度慢"的结论。这会排除造成业绩不佳的一系列潜在原因。
12+
13+
当应用程序需要查询结果或需要在 MySQL 中存储数据时,它会通过网络将请求发送到 MySQL,为了执行请求,MySQL 与操作系统交互并使用主机资源(如内存和磁盘)。一旦请求的结果准备就绪,它将通过网络将通信回应用程序。图 1-1 说明了这一点。
14+
15+
补充图1-1
16+
17+
金字塔是一个非常简化的图片,它把应用程序以外的一切都删除,而应用程序又可能与用户通信并使用自己的资源。 网络通信还涉及主机和操作系统。
18+
19+
为了说明图层如何交互,请考虑一个实际示例。一个 MySQLuser 报告了 MySQL 遇到临时摊位的问题。在Linux上使用 perf 工具的一项调查显示,之所以出现停滞,是因为内存非常分散,主要是由 I/O 缓存引起的。当您通过网络提交数据时,Linux 会请求连续的内存部分(使用 kmalloc),但由于内存严重碎片,Linux 必须先对内存进行碎片整理(压缩)。虽然此压缩发生,但包括 MySQL 在内的所有内容都停滞不前,并且在最恶劣的情况下,它最多需要一分钟(服务器有大量的内存可用于 I/O 缓存),因此造成了严重影响。在这种情况下,将 MySQL 配置更改为使用直接 I/O 可以解决此问题。虽然这是一个极端的情况,但值得记住的是,互动会导致令人惊讶的拥堵点。
20+
21+
一个更直接的实际示例是使用框架来生成查询的应用程序。框架中有一个错误,这意味着对大型表的查询省略了一个在位子句。这意味着一个级联问题列表,包括应用程序重试查询,并在几秒钟内完成 50 个查询副本(因为数据最终被读取到缓冲池中,使最后一个查询执行速度比第一个查询快得多),并发送大量数据回应用程序,导致网络过载和应用程序内存耗尽。
22+
23+
本书重点介绍 MySQL 和影响查询的各个方面,但不要忘记系统最集中。这包括监视系统时。
24+
25+
## 监控方式
26+
27+
如果你只从阅读这本书中拿出一件事,那么让监控对于维持一个健康的系统至关重要。你所做的一切都应该围绕着监控。在某些情况下,通过专用的监视解决方案进行监视可提供您需要的所有数据,在其他情况下,您需要进行临时观察。
28+
29+
您的监视应使用多种信息来源。 这些包括但不限于
30+
31+
- 性能模式,包括从低级互斥量到查询和事务度量的信息。这是用于查询性能调整的最重要的信息源。 sys模式提供了一个方便的界面,特别是用于即席查询。
32+
- 信息模式,其中包括模式信息,InnoDB统计信息等。
33+
- SHOW语句,例如,包含来自InnoDB的信息以及详细的引擎统计信息。
34+
- 慢查询日志,可以记录符合某些条件的查询,例如花费比预定义阈值更长的时间。
35+
- EXPLAIN语句返回查询执行计划。这是一个无价的工具,用于调查为什么由于缺少索引,查询以次优方式编写或MySQL选择次优方式执行查询而导致查询无法正常运行的原因。 EXPLAIN语句在调查特定查询时通常以临时方式使用。
36+
- 操作系统指标,例如磁盘利用率,内存利用率和网络利用率。不要忘记简单的指标(例如可用存储量),因为存储空间不足会导致中断。
37+
38+
39+
40+
这些信息来源在本书中都有讨论和使用。
41+
42+
在整个性能调优过程中使用监视时,您可以验证问题是什么,找到原因,并证明您已经解决了问题。在处理解决方案时,了解查询的生命周期也很有用。
43+
44+
## 查询的生命周期
45+
46+
执行查询时,它会在查询结果回到应用程序或客户端之前执行几个步骤。每个步骤都需要时间,而且本身可能是由多个子部分组成的复杂操作。
47+
48+
查询生命周期的简化概述见图 1-2。在实践中,涉及的步骤更多,如果你安装插件,如查询重新编写,它会添加自己的步骤。但是,该图确实涵盖了基本步骤,稍后将更详细地介绍几个步骤
49+
50+
补充图 1-2
51+
52+
MySQL 服务器可分为两层。例如,SQL 层处理连接并准备语句以执行。实际数据由存储引擎存储,这些引擎作为插件实现,因此相对容易实现处理数据的不同方法。本书中考虑的主要存储引擎是 InnoDB,它是完全可操作的,并且对高并发工作负载具有很好的支持。另一个存储引擎的示例是 NDBCluster,它也是事务性的,用作MySQL NDB群集的一部分。
53+
54+
当应用程序需要执行查询时,第一件事是创建连接(这不包括在图中,因为连接可以重复使用以执行更多查询)。当查询到达时,MySQL 将分析它。这包括将查询拆分为令牌,因此查询类型是已知的,并且查询所需的表和列列表。在下一步中,需要此列表,检查用户是否具有执行查询所需的权限。
55+
56+
此时,查询已达到确定如何执行查询的重要步骤。这是优化器的工作,涉及重写查询以及确定访问表的顺序以及要使用的索引。
57+
58+
实际执行步骤包括从存储引擎层请求数据。存储引擎本身可能很复杂。对于 InnoDB,它包括用于缓存数据和索引的缓冲池、重做和撤消日志、其他缓冲区以及表空间文件。如果查询返回行,则这些行通过 SQLlayer 从存储引擎发送回应用程序。
59+
60+
在查询调优中,最重要的步骤是优化器和执行步骤,包括存储引擎。本书中大部分信息直接或间接地与这三部分有关。
61+
62+
## 概要
63+
64+
本章触及了性能调优的表面,并让你为本书的其余部分的旅程做好准备。关键要点是,您需要考虑从最终用户到主机和操作系统的低级详细信息,监视在性能调整中是绝对必须的。执行查询包括每个步骤,其中优化器和执行步骤是您将在本书中学到的最多步骤。
65+
66+
下一章将仔细研究一种有助于解决性能问题的方法。

0 commit comments

Comments
 (0)