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

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

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



我想提一提的另一件事是,我没有使用query_cache,所以会有很多磁盘读取。 br />
此服务器将具有32GB RAM,并将运行Ubuntu 12.04

评论

以千兆字节计,您的数据库有多大?以下哪个答案最正确,实际上取决于对数据量的了解。

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

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

购买不为您赚钱的东西几乎不是一项投资...

#1 楼

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

评论


您如何定义一个好的SSD?

–迈克
2014-2-27在18:53



一切都与性能和基准有关。我会做的是使用google搜索所购买的SSD的基准或评论。除此之外,en.wikipedia.org / wiki / IOPS#Examples提供了非常通用的概述。

– nmad
14年2月27日在18:58

#2 楼

您需要在这里考虑三个因素:


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


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

如果可用内存<数据库大小,则查询可能需要从磁盘检索数据。对于极其复杂的查询,或者如果许多用户一次运​​行查询,这可能会开始给磁盘增加压力。很少/从未使用过数据,您只需要将数据库的20%保留在内存中即可保持性能。

您所需的确切内存量不会立即显现出来,但是除非您的数据库为200GB +,否则我将强烈建议您接受Up_One的建议,并花更多的钱在内存上而不是SSD上。
NB:如果您的数据库使用的是MyISAM(可以使用show table status;进行检查),请考虑更改为InnoDB。 MyISAM key_buffer_cache仅存储索引块,而InnoDB缓冲池存储整个数据块。在大多数情况下,InnoDB将被证明是一个更好的引擎。

评论


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

–迈克
2014年3月3日19:58

如果您的表是InnoDB,并且您的InnoDB缓冲池足够大,则MySQL将自动管理数据库在内存中的缓存,并将尝试始终将最常用的数据保留在内存中。 MySQL的文档很好地概述了其工作原理。

–内森·乔利(Nathan Jolly)
2014年3月3日在23:08

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

– Jackofall
15年7月30日在9:48

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

–内森·乔利(Nathan Jolly)
15年8月14日在4:16

#3 楼

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

评论


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

–雅罗斯拉夫
14年2月28日在8:30

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

– Up_One
14年2月28日在11:24

#4 楼

作为替代方案:您可以同时使用一个大硬盘(理想情况下,RAID1具有三个磁盘)来保存数据,并使用一个较小的SSD来保存索引。
>
索引非常小,因此您可以使用较小的SSD
常见的查询无论如何应该主要还是指向索引用于随机读取
如果磁盘发生故障,三个磁盘将具有容错性
如果SSD发生故障,则可以重建索引


#5 楼

做到这一点。

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

如edvinas.me所述,与旋转磁盘相比,SSD的IOPS快几个数量级。对于数据库,IOPS几乎可以转换为每秒请求数。忽略RAM缓存,您为SSD提供的请求将是从7200RPM磁盘发出的请求的100倍左右。反正填充磁盘。别着急。

我不确定这笔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差不多的成本,同时速度却要慢得多。说SSD很明显。

#6 楼

我绝对同意,最大的好处来自增加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,ioengine = libaio,iodepth = 64
读取:io = 3071.7MB,bw = 5012.8KB / s,iops = 1253,欠缺= 627475msec
写:io = 1024.4 MB,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,矮级= 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,欠缺= 33566msec
写:io = 1024.4MB,bw = 31249KB / s,iops = 7812,欠缺= 33566msec
cpu:usr = 5.73%,sys = 35.83%, ctx = 181568,majf = 0,minf = 23

35,484 IOPS-2 x镜像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,欠缺= 22137msec
写:io = 1027.7MB,bw = 47537KB / s,iops = 11884,欠缺= 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