本帖最后由 武汉分校-小舞 于 2018-11-23 17:31 编辑
随着负载和文件大小的增长,性能往往会降低。记住以下的7个关键点,让你的MySQL轻松保持平稳运行。
测量应用程序的方式之一是测量它的性能。用户体验是衡量应用程序性能的一个指标,这就意味着用户是否能在合理的时间内获得所需的内容。
有很多研究都表明,性能对用户的行为有很大的影响:
79%的用户表示不太可能再次打开一个缓慢的网站;
47%的用户期望网页能在2秒钟以内加载;
40%的用户表示如果加载时间超过三秒钟,就会放弃这个网站;
页面加载时间延迟一秒可能导致转换损失7%,页面浏览量减少11%。
无论标准是什么,都要保持良好的应用性能是非常必要的。否则,用户就会抱怨(或转到另一个应用程序)。影响应用程序性能的一大因素就是数据库性能。应用程序、网站和数据库之间的交互对应用程序性能至关重要。
这种交互的核心部分是应用程序如何查询数据库以及数据库对请求的响应。无论从哪一方面来说,MySQL都是最受欢迎的数据库管理系统之一。很多企业正在将MySQL(和其他开源数据库)作为其生产环境中的数据库解决方案。
有很多配置MySQL的方法可以帮助确保您的数据库快速响应查询,并且减少应用程序性能下降。
以下是帮助您优化MySQL数据库性能的一些重要技巧。
MySQL优化关键1:了解如何使用EXPLAIN
对于数据库,您做出的最重要的两个决策分别是:
设计应用程序实体之间的关系如何映射到表(数据库模式)中
设计应用程序如何以所需格式(查询)获取所需的数据。
复杂的应用程序可能具有复杂的查询和模式。如果您要获得应用程序所需的性能和扩展性,不能仅仅直观的来了解查询是如何执行的。
您应该学习如何使用EXPLAIN命令。此命令向您展示了应该如何执行查询,并让您深入了解可以预期的性能以及查询如何随着数据大小的变化而缩放。
类似于MySQL Workbench的工具,都可以为您显示EXPLAIN输出,但您仍然需要学习基础知识以理解它。
EXPLAIN命令提供输出有两种不同格式:旧式表格格式和更现代化的结构化JSON文档,后者能提供更多的细节(如下所示):
对于一个组件来说应该关注的是“查询成本”。查询成本是指基于许多不同的因素上,MySQL在查询执行的总体成本考虑了该特定查询成本。
简单查询的查询成本通常低于1000。成本在1000到100000之间的查询被视为中等成本查询,如果您每秒只运行数百个这样的查询(而不是数万),通常认为是快速的。
超过100000的查询认为是高成本查询。通常,当您是系统上的单个用户时,这些查询仍然运行得很快,但是必须要考虑到在交互式应用程序中使用这些查询的频率(尤其是随着用户数量的增长)。
虽然这都是一些大致的数字,但是它们表现出了一般原则。体系结构和配置可能会影响系统的处理查询工作负载。
确定查询成本的主要因素是查询是否使用正确索引。 EXPLAIN命令可以告诉您查询是否要用索引。这就是为什么学习使用EXPLAIN 的重要原因。
[/hide][/hide]
MySQL优化关键4:将数据库保存在内存中
近年来,我们看到了固态硬盘(SSD)的转型。即使SSD比旋转硬盘驱动器要快得多,但是它们仍然与RAM中的数据不兼容。这中差异不仅来自于存储性能本身,还来自数据库在从磁盘或SSD存储中检索数据时必须执行的其他工作。
随着硬件改进,无论您是在云端运行还是管理自己的硬件,都越来越有可能将您的数据库存储在内存中 -。
更好的消息是,您不需要将所有数据库都装入内存,只需将常访问的工作数据集合放到内存中即可。
检查数据库在稳定状态下运行的I / O数量(通常在启动后几个小时)。下图您可以在Percona监控和管理的InnoDB Metrics仪表板上的InnoDBI / O。
在上图中,您可以看到峰值高达每秒2000个I / O,这表明(至少对于工作负载的某些部分),数据库工作集与内存不匹配。
MySQL优化关键5:使用SSD存储
如果您的数据库不适合内存,但仍然需要快速存储来处理写入,并避免数据库加速(重新启动之后)时出现性能问题。 这些快速存储意味着需要使用SSD。
由于成本或可靠性原因,一些“专家”仍然主张使用旋转磁盘。但在操作数据库中,这些观点往往是过时的或错误的。今天,SSD在友好的价格上提供了令人印象深刻的性能和可靠性。
然而,不是所有的SSD都是相同的。对于数据库服务器,您应该使用专为服务器工作负载设计的SSD。
一种直接通过NVMe或Intel Optane技术直接连接的SSD可提供最佳性能。即使作为SAN,NAS或云块设备进行远程连接,与旋转磁盘相比,SSD仍然具有优异的性能。
MySQL优化关键6:向外扩展
即使是性能最好的服务器也有局限性。有两种扩展方式:up和out。up意味着购买更多的硬件,但硬件很贵且很快就会过时。out有几个好处:
可以利用更小、成本更低的系统。
通过向外扩展能更快更容易的线性放缩。
由于数据库分布在多台物理机上,因此数据库不会收到单椅硬件故障的影响。
虽然向外扩展有优势,但也有一定的局限性。味了数据同步,扩展需要复制,例如基本的MySQL或Percona XtraDB集群复制。
您还需要确保连接到集群架构的应用程序可以找到所需的数据,通常要通过一些代理服务器和负载平衡器来实现,如ProxySQL或HAProxy。
在计划扩展的同时,要避免过早的扩张,使用分布式数据库往往更复杂。
MySQL优化关键7:拥有可观察性
最好的系统在设计时要考虑到可观察性。
您将MySQL环境设置好、运行并正确调整之后,也不能就将它放置不管,数据库环境可能受到系统或工作负载更改的影响。为流量达到峰值、应用程序错误和MySQL故障等情况做好准备。
当这些情况发生时,你需要快速有效地解决它们。实现这一点的唯一方法是设置一些监控解决方案并进行正确的检测。这可以让您看到数据库环境中正在运行的情况,并在出现问题时分析错误。理想情况下,系统能在发生事件之前进行拦截。
MySQL Enterprise Monitor,Monyog和Percona监控和管理(PMM)都是不错的监控工具,具有免费和开源的优势。这些工具为监控和故障排除提供了良好的操作可见性
随着越来越多的公司转向开源数据库(特别是MySQL),以此来管理和服务于大规模生产环境中的业务数据,他们需要专注于保持这些数据库的调整和运行的最佳效率。数据库性能可能会导致或破坏您的业务目标,MySQL为您的应用程序和网站提供优质的数据库解决方案,但要根据您的需求进行调整,以满足您的需求并进行监控、查找、防止瓶颈和性能问题。
|
|