用于数据库的SSD与HDD


42

我正在尝试购买新的服务器以在其上运行MySQL Server。这个新服务器将成为我主机的从属服务器。但是,此服务器将专用于仅报告“大量读取和复杂查询”。

现在,我正在考虑投资固态硬盘,但想知道这是否真的值得。SSD和SATA 7200硬盘之间的差价约为1500美元,并且SSD的磁盘空间较小。如果我确实投资SSD,那么速度会明显吗?

我可以以比购买2(500GB SSD)少$ 1500的价格购买4(500GB SATA 7200)

您能否帮助我做出决定,看看是否值得升级?

我想再次提一提的是,我没有使用query_cache磁盘,因此会有大量磁盘读取。

该服务器将具有32GB的RAM,并将运行Ubuntu 12.04


以GB计,您的数据库有多大?以下哪个答案最正确,实际上取决于对数据量的了解。
弥敦道(Nathan Jolly)2014年

1
如果您确实使用了SSD,则可能要等到四月才能使用Ubuntu 14.04或在12.04上手动启用TRIM。有关更多信息,请参见本文
OSE 2014年

5
串行ATA(SATA)是接口。有SATA SSD和不使用SATA的硬盘驱动器(HDD)。
丹尼斯

买一些不为您赚钱的东西几乎不是一项投资……
inf3rno

Answers:


25

是的,需要进行大量读取,并报告SSD会带来巨大的变化。从7200 RPM驱动器,您可以期望不超过约100 IOPS,而最便宜的SSD的速度可以是其最低5倍。有了好的SSD,您可以达到20000 IOPS甚至更高。

此外,由于磁盘不必每次都移动,因此SSD中的随机写入速度要快得多。


4
您如何定义一个好的SSD?
麦克,

一切都与性能和基准有关。我会做的是Google来购买您所购买的SSD的基准测试或评论。除此之外,en.wikipedia.org / wiki / IOPS#Examples提供了非常通用的概述。
nmad 2014年

20

这里需要考虑三个因素:

  1. 数据库的大小
  2. 服务器中的内存量
  3. 您的my.cnf配置,特别是 innodb_buffer_pool_size

如果可用内存>数据库大小,则服务器可能将所有数据保留在内存中,因此SSD可能会浪费金钱。InnoDB缓冲区与query_cache选项无关。

如果可用内存<数据库大小,则查询可能需要从磁盘检索数据。对于极其复杂的查询,或者如果许多用户一次运​​行查询,这可能会开始给磁盘施加压力。

通常,数据库会将最常用的数据保存到内存中-如果很少/从未使用过80%的数据,则只需将20%的数据库保存在内存中即可保持性能。

您所需的确切内存量不会立即显示出来,但是除非您的数据库为200GB +,否则我将强烈建议您接受Up_One的建议,并花更多的钱在内存上而不是SSD上。

注意:如果您的数据库使用的是MyISAM(可以使用进行检查show table status;),请考虑更改为InnoDB。MyISAM key_buffer_cache仅存储索引块,而InnoDB缓冲池存储整个数据块。在大多数情况下,InnoDB将被证明是一个更好的引擎。


如何将数据库放入内存中?服务器是从服务器,因此它会一直在其上进行写操作,但由于报告的原因,它也将具有沉重的读取负载
Mike

如果您的表是InnoDB,并且您的InnoDB缓冲池足够大,则MySQL将自动管理数据库在内存中的缓存,并将尝试一直将最常使用的数据保留在内存中。MySQL的文档很好地概述了它的工作原理
弥敦道(Nathan Jolly)2014年

@NathanJolly即使整个数据库都在内存中,保存数据时仍然会对硬盘进行读写操作,而且各种服务器都有局限性。例如,SQL Server Express版本限制为仅使用1GB内存,因此它不能容纳较大的数据库。
Jackofall

@Jackofall虽然绝对正确,但是这里的问题指定了一个读取大量的MySQL数据库。可以从内存而不是到达磁盘(甚至快速磁盘)的每个只读查询都是好消息。
弥敦道(Nathan Jolly)2015年

6

我认为这不是一个好主意!
我的建议
增加InnoDB缓冲池的大小是加速MySQL的最佳方法。如果可以添加更多RAM,请执行此操作。可以想象,这会将大部分热数据存储在内存中!磁盘与内存!
完美的方案是拥有与数据库
SSD一样大的内存-很棒,但是会很昂贵!而且只适合阅读密集型工作。

在此链接上查看Vadim Tkachenko的相关文章


1
您链接的文章已有将近4年的历史,与当时相比,SSD的价格降低了一半以上,性能也大大提高了。内存数据库的大小?关于500Gb数据库呢?拥有如此多可用内存的不仅是RAM数量,还是您需要购买的服务器。
Yaroslav 2014年

关于数据库大小!是的,您无法做到这一点-但正如我所说,这将是一个完美的方案!
2014年

6

作为替代方案:您可以同时使用一个大硬盘(理想情况下,具有三个磁盘的RAID1)来保存数据,并使用一个较小的SSD来保存索引。

理由:

  • 索引很小,因此您可以使用较小的SSD
  • 普通查询无论如何应该主要打索引
  • RAID1提供容错能力
  • RAID1使您可以均衡负载以进行随机读取
  • 如果一个磁盘出现故障,三个磁盘将具有容错能力
  • 如果SSD发生故障,则可以重建索引

5

做吧

您提到您的工作量很大,因此您已经避免了在数据库上使用SSD的大问题:损耗。没有文字就意味着没有磨损,所以您是黄金。

如edvinas.me所述,与旋转磁盘相比,使用SSD的IOPS快几个数量级。对于数据库,IOPS几乎可以转换为每秒请求数。忽略RAM高速缓存,您将为SSD提供的请求大约是7200RPM磁盘的100倍。

TRIM不会造成太大的变化,因为它是繁重的工作量,而且听起来您打算无论如何都要填充磁盘。不要强调它。

我不知道1500美元的价格是从哪里来的。查看我当地的(澳大利亚)供应商,我可以以750美元的价格获得960GB信誉良好的SSD(http://www.auspcmarket.com.au/960gb-crucial-m500-sata-6gbps-2-5-7mm-with- 9-5mm适配器SSD读取500mb-s-写入400mb-s /)。旋转磁盘或多或少是免费的,但$ 750仍然比$ 1500更可口。

(哦,等等-您可能是从某大牌供应商那里订购的,所以他们通过鼻子向您收取SSD费用吗?我总是单独购买SSD并自己更换它,但是我不知道那是不是在您的环境中是允许的。)

您也可能会使用更少的RAM,但是如果不知道确切的工作负载,就很难判断是否可以安全地减少RAM而又不损害性能。

如果您仍然不确定,您可以获得10k RPM大型驱动器,但无论如何它们最终将花费几乎与SSD相同的价格,而速度却要慢得多。

如果您需要扩展到超过1TB,那么SSD就会变得过于昂贵,但是如果达到1TB,我想说SSD无疑是一个胜利。


3

我绝对同意,最大的好处来自增加innodb_db_bufferpool的大小,但是不幸的是,这完全取决于您的数据集的大小以及访问不同磁盘块的频率。我维护着几个很大的数据库,它们的大小都超过200 GB,因此将所有内容都放入RAM并不是真正的选择,因此我们最近切换到了基于SSD的存储。我已经在有关可访问的不同RAID阵列上用于MySQL的IOPS方面进行了大量研究。结果如下:

1,253 IOPS-4 x SCSI 15k(3.5“)磁盘

测试:(g = 0):rw = randrw,bs = 4K-4K / 4K-4K-4K / 4K-4K,ioengine = libaio,iodepth = 64读取:io = 3071.7MB,bw = 5012.8KB / s,iops = 1253 ,runt = 627475msec写入:io = 1024.4MB,bw = 1671.7KB / s,iops = 417,runt = 627475msec cpu:usr = 0.63%,sys = 3.11%,ctx = 985926,majf = 0,minf = 22

2,558 IOPS-8 x 10K RPM 900GB SAS(2.5“)磁盘

测试:(g = 0):rw = randrw,bs = 4K-4K / 4K-4K-4K / 4K-4K,ioengine = libaio,iodepth = 64读取:io = 3071.7MB,bw = 10236KB / s,iops = 2558, runt = 307293msec写入:io = 1024.4MB,bw = 3413.5KB / s,iops = 853,runt = 307293msec cpu:usr = 2.73%,sys = 8.72%,ctx = 904875,majf = 0,minf = 25

23,456 IOPS-Rackspace Performance 2 SSD服务器

测试:(g = 0):rw = randrw,bs = 4K-4K / 4K-4K-4K / 4K-4K,ioengine = libaio,iodepth = 64读取:io = 3071.7MB,bw = 93708KB / s,iops = 23426, runt = 33566msec写入:io = 1024.4MB,bw = 31249KB / s,iops = 7812,runt = 33566msec cpu:usr = 5.73%,sys = 35.83%,ctx = 181568,majf = 0,minf = 23

35484 IOPS-2个Mirrored EDGE Boost 480GB 2.5英寸MLC(http://www.edgememory.com

测试:(g = 0):rw = randrw,bs = 4K-4K / 4K-4K / 4K / 4K-4K,ioengine = libaio,iodepth = 64读取:io = 3068.4MB,bw = 141934KB / s,iops = 35483, runt = 22137msec写入:io = 1027.7MB,bw = 47537KB / s,iops = 11884,runt = 22137msec cpu:usr = 11.68%,sys = 69.89%,ctx = 24379,majf = 0,minf = 20

因此,很明显,当今的高质量SSD表现出色。两个镜像SSD可以轻松胜过16磁盘SAN存储机箱,这是一个令人信服的声明。

如果您对详细信息感兴趣,其余的文章可以在我的博客中找到:

http://www.juhavehnia.com/2015/05/using-ssds-to-improve-mysql-performance.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.