为MySQL寻找I / O,CPU和RAM的最佳平衡

很长时间以来,我一直想知道如何在服务器增加更多的内存时扩展MySQL。我们希望尽可能地利用硬件,限制系统复杂性,降低性价比请为此提出适当的解决scheme。

对于每个环境都没有一成不变的解决scheme,但性能调整的过程总是相同的。 性能调整是一个反复的过程:

  1. 基准和跟踪指标
  2. find瓶颈
  3. 解决瓶颈
  4. 重复

在解决每个瓶颈时,您可能会发现系统的另一部分现在是限制因素。 这就是为什么你需要重复这个过程,直到你对结果满意为止。

在各个性能分析层面寻找主要的东西是延迟 。 哪些活动占用最多的时间? 哪些活动在用户活动的关键path中? 关键path中的延迟是用户痛苦的直接测量,而吞吐量,iops,CPU和内存使用等其他指标没有明显的含义。

确定你的慢速查询并优化它们 – 如果可能的话,重新编写查询或添加索引,但如果没有,则添加硬件。 如果您的指标显示查询的大部分时间都花费在等待从磁盘读取,则添加内存以增加caching将有助于解决该瓶颈。 如果大部分时间都花在等待同步写入磁盘上,请获取更多磁盘或更快速的磁盘(例如SSD)。 如果大部分时间都花在等待CPU时间或在CPU上,则可以获得更多或更快的CPU。

如果您有机会在使用DTrace的系统上运行数据库,请阅读Brendan Gregg的DTrace书籍,并予以启发。

很长一段时间,我想知道如何扩大MySQL,因为你增加更多的内存到服务器

非常像Oacle,SQL Server和所有其他数据库服务器。 数据库操作udner ACID条件的物理不会改变。

我们寻求在尽可能利用硬件,限制系统复杂性,降低性价比之间取得平衡。请为此提出适当的解决scheme。

什么是最佳车?

同样的答案:IT依赖。 你没有说任何相关的答案,投票结束。

看,我运行一个SQL服务器。 小型安装 – 仅有16GB内存,4个内核,8个快速硬盘和1个SSD +启动驱动器。 是的,这是小的 – 在另一个世界(另一个合同)我工作的Oracle数据库Exadata与21000 GB的数据库空间,比大多数超级跑车的成本更高。 因为我们需要它。 我的下一个升级到我的SQL服务器rwill有80个光盘,128GB内存的地方,并获得更多的SSD。 这里的大多数人会考虑这个大,我认为这是一个很好的低端服务器。

你可能会在一个联盟,你认为一个60GB的SSD是昂贵的。 你不知道。 你什么都不说,你需要做什么,你有多less负载。 你期待我们回答什么?

唯一明智的答案是:调整你的bottlenexks,并计划扩大。 例如,SuperMicro拥有多达72个光盘的4机架单位高服务器机箱,以及mobherboard。 2个机架单位= 24个光盘。 其中之一就是让你具有计算机可扩展性。 获取多个processsor CPU板明智的,插入一个。 与RAM相同。 解决瓶颈问题。 知道你做什么;)当你获得更高端的数据库时,减less系统的复杂性是徒劳的。 这就像一个五星级的厨师说,他不想做饭,宁愿预制食物。 更高性能的数据库系统是复杂的。 处理它。

这取决于你正在使用的引擎。 最常见的MyISAM引擎在这方面相当愚蠢 – 它本身并没有做任何有意义的内存pipe理。 几乎所有东西都留给操作系统。 如果操作系统的分页algorithm能够找出下一个引擎可能想要的内容,它将在文件系统caching中留下正确的mempages。 如果没有,则会将其丢弃,并且将不得不从磁盘再次加载下一个查询。

由于O / S对MyISAM数据结构并不了解,因此不会对数据库的索引页面给予任何偏好,因为它们是数据库中“最近使用”数据的相似之处。 计算世界中的其他“正确的”数据库pipe理系统都会自己进行内存pipe理,有时甚至在操作系统顶层都有自己的线程pipe理作为性能优化措施 – 因此在将caching的数据行页caching并保留一段时间时优先考虑索引表然后写入磁盘(“懒惰作家”)。

因此,对于一个主要读取的MyISAM数据库来说,明确的措施是在系统上获得更多的RAM,这样就可以确保caching所有索引页面,并减less昂贵的I / O操作。

如果您正在寻找与“真实世界”查询(比用于PHP应用程序的“SELECT * from A LIMIT 10”相比更加平衡和可调整的性能),那么您绝对应该考虑一下不同的DBMS。