调整mysql 性能_性能调整的“目标”

调整mysql 性能

我们如何使我们的程序更快? 我们如何使一切更快?

我的第一个合作社工作是包装工作。 他们有一个小型的工业工程图书馆,让我在工作中阅读。 我读过的第一本书改变了我的生活和解决问题的思维方式: Eliyahu M. Goldratt 的目标 。 几乎每次我在表演时,我都无法不与目标进行比较。 在本文中,我们将看书中的一些故事以及它们如何应用于编程中的性能调整。

值得修复的东西

这看起来似乎很明显,但是在修复某些问题之前,您需要知道是否值得修复。 这就是为什么我们从测量开始。 为了改进流程,我们需要确定瓶颈。 如果我们在流程的一部分中提高了性能,但仍然遇到了主要瓶颈,那么实际上可能会使情况变得更糟。

“目标”中 ,他们谈论了一个侦察兵部队要进行长时间的远足。 如果您与很多人一起徒步旅行,您会知道,当遇到棘手的问题时,比如说您必须越过单个文件流,通常会有很多人在等待轮到他们。

在故事中,部队的侦察兵比其他人都慢。 我们称他为Schneems。 他从侦察兵群中间的某个地方开始。 当他远足并遇到这些障碍时,他必须像其他所有人一样排队等候。 部队负责人注意到,在Schneems之前的一些成员取得了领先。 第一个侦察员到达目的地可能要快一个小时。 最终人们开始通过Schneems。 现在,当他遇到障碍时,他必须等待更多的人。

如果目标是尽快使每个侦察员走到尽头,这不会造成太大问题。 但是事实并非如此。 部队必须成群移动。 他们只有在解决了所有问题后才能离开。 当Schneems最终前往目的地时,第一个侦察员必须坐等几个小时。 每个人都精疲力尽。 有什么办法可以加快速度吗?

在这种情况下,Schneems是瓶颈。 我们可以要求他不要来使整个部队更快,但这不是一个选择,因为每个人都应该享受户外活动。 由于我们无法消除瓶颈,因此我们可以确保他永远不会等待。

我们要确保他每次流媒体时都不必停下来。 他在一条线上等待的每一秒钟就是整个队伍在等待的另一秒钟,因此我们应该使用我们的资源来确保瓶颈始终以最高效率运行。 制定了一条新规则–现在Schneems走在前面,任何人都不能越过他。 真正快的孩子被束缚在他身后,但实际上他们早些回家了。

资源与权衡

在优化性能时,我们的资源池有限。 我们通常可以交易一些资源以获得另一资源。

在徒步旅行的情况下,快孩子们最后有多余的时间。 我们以团体徒步旅行为整体花费的较短时间进行交易。 在编程中,我们的资源通常是CPU,RAM和IO。 例如,我们可以交易一个昂贵的计算(CPU),将结果存储在内存缓存中,并在需要时将其提取(网络IO)。

基准测试和测量不仅是为了找到慢速情况。 他们的目的是试图更好地了解您放置在系统上的负载。 尽管您的程序可能需要大量输入,但是可能有些输入比其他输入更常见。 如果您正在运行Web应用程序,则每个请求都可能指向不同的路径或页面,但是加载的每个页面都需要下载JS和CSS。 我们可以通过将它们放在CDN后面来优化它们。

除常见情况外,您还需要了解压力情况( 边缘情况)。 如果您将幸福道路的速度提高了1%,但将其他所有事物的速度降低了90%,那么这可能不是一个好选择。

传输与传热

目标 》中的下一个故事发生在工厂中。 为变速箱加工零件(我父亲实际上是一家生产自动变速箱的公司的经理),在这家工厂中,将原金属切成齿轮尺寸,然后将其放入铣床中。 研磨齿轮后,将它们一次放入一个热处理炉中,以便对零件进行回火。 炉子装满后,便开始运行。 然后将零件卸下,然后继续进行单独的整理和安装过程。

如果您去过必须进行热处理的工厂,那么您已经发现问题了。 热处理需要很长时间。 一旦使材料达到特定的温度(通常是高温),就必须将其放置一段时间,然后让它们缓慢冷却。 用于此的设备是巨大的。 想一想像个军营大小的比萨烤箱。 它占用了大量的工厂占地面积,并且购买和运营成本很高。 购买另一个热处理炉很少是一种经济有效的选择。

假设这家工厂的订单量很大,而且必须按时完成。 如果他们不按时交货,他们将失去合同,工厂可能会倒闭。 他们必须增加吞吐量。

由于炉子是我们的瓶颈,因此我们想确保它永远不会等待。 当不是加热装置时,就没有赚钱。 但是我们不能像慢侦察员那样将熔炉放在生产线的开始。 我们可以做什么?

在工厂中,我们有三台资源机器:

  1. 炉子
  2. 工人
  3. 工厂空间

我们可以利用工人和工厂空间来确保机器持续运行。 我们可以购买机架而不是一一装载齿轮,然后将其放置在熔炉旁边。 机架上装有齿轮,并准备好在批处理完成之前立即进入炉子。

工业工程师将此过程称为“积累”。 是的,这对工人来说是更多的努力。 现在他们必须将零件移动两次。 是的,它占用了工厂更多的空间。 但是,如果您的目标是每天通过工厂获得最大数量的齿轮,那么我们必须确保炉子始终在运行。 这样就解决了这个问题。

如果您弄清楚代码的哪一部分使响应时间最长,则可以确保尽快。 如果不能更快,请确保它不会在其他慢速代码后面等待。

墙上的99个瓶颈

“修复”瓶颈的问题在于,它将始终暴露另一个瓶颈。 例如,也许一旦炉子以接近峰值的效率运行,事实证明铣床实际上不能足够快地生产齿轮来保持炉子充满。 当您修复程序的一个性能部分时,瓶颈将消失,您需要修复另一个性能问题。 今天可能是SQL执行时间。 也许明天是视图渲染。

这听起来可能非常令人沮丧,但我认为并非如此。 性能调优并不是什么神奇的艺术。 这是一个过程。

完成该过程后,您将重新开始该过程。 您从目标开始,并陈述您想要实现的目标。 可能是“我想要更多的吞吐量”或“我希望缩短响应时间”。 然后,您进行基准测试以了解您的程序。

一旦了解了成功的道路和边缘情况,就可以开始寻找瓶颈。 当消除或优化瓶颈时,您会看到实现目标的进度。 如果您已实现目标,请停止。 如果不是,请重新开始该过程。 等待您找到它的地方还有另一个瓶颈。

很容易卡住,不知道下一步该怎么做。 在以上故事中,我们陈述了资源并对其进行了简化。 在编程和生活中,这从未如此简单。 也许您无法弄清楚如何对某些基准进行测试,或者您找到了较慢的部分,但是却不知道如何对其进行优化。 有时,它已经进行了优化,您需要继续进行其他工作。 所有这些听起来都很吓人,但是如果将其分解,还不算太糟。

标杆管理是一项与众不同的技能。 您可以在其中找到博客文章,书籍和其他材料。 如果您不知道从哪里开始,请找一个正在进行性能调优的人,然后看看他们是如何做的。 复制他们的基准测试技术,直到找到其他更好的做法。

舒适地进行基准测试后,可以使用相同的学习路径进行优化。 在人们从事绩效工作的地方查找拉动请求。 为什么会更快? 他们在公关中谈论什么? 如果您听不懂,请请一位同事或一位朋友轮流尝试互相解释。

如果您正处于此阶段,那么您的目标是学习如何进行基准测试,以及如何有效地以速度交易资源。 如果您是入门者,那么提高代码速度的瓶颈就是您自己的学习曲线。 没关系; 有一个食谱。 制定目标,进行测量,解决瓶颈,然后重复。

翻译自: https://www.javacodegeeks.com/2016/07/goal-performance-tuning.html

调整mysql 性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值