英特尔 S3700 SSD 上的 Postgres 写入性能

use*_*922 7 postgresql performance

我没有看到 Postgres 写入性能的提高,我认为我会使用单个 SSD 与 (16) 15k RPM SAS 驱动器的硬件 RAID 10 阵列。

我有一个戴尔 R820,带有 PERC H700 硬件 RAID 卡和 RAID 10 阵列中的 16 个 15k RPM SAS 驱动器,以及一个 800GB 的 Intel s3700 SSD。该服务器具有 128GB 的​​ RAM 和 64 核的 Xeon E5-4640,频率为 2.40GHz,运行 CentOS 6.4 和 Postgres 9.2.4。

我正在使用 pgbench 将 RAID 10 阵列中的 SAS 驱动器与单个 SSD 进行比较。

15k RPM SAS RAID 10 结果

pgbench -U postgres -p 5432 -T 50 -c 10 pgbench
开始真空……结束。
交易类型:TPC-B(有点)
比例因子:1
查询方式:简单
客户数量:10
线程数:1
持续时间:50 秒
实际处理的交易数量:90992
tps = 1819.625430(包括连接建立)
tps = 1821.417384(不包括连接建立)

单个 Intel s3700 SSD 结果

pgbench -U postgres -p 5444 -T 50 -c 10 pgbench
开始真空……结束。
交易类型:TPC-B(有点)
比例因子:1
查询方式:简单
客户数量:10
线程数:1
持续时间:50 秒
实际处理的交易数量:140597
tps = 2811.687286(包括连接建立)
tps = 2814.578386(不包括连接建立)

在实际使用中,我们有一个非常密集的写入过程,大约需要 7 分钟才能完成,而 RAID 10 阵列和 SSD 之间的时间相差在 10 或 15 秒之内。

我期望 SSD 的性能要好得多。

以下是 SSD 的 Bonnie++ 结果:

版本 1.96 ------顺序输出------ --顺序输入- --随机-
并发 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
机器尺寸 K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
openlink2.rady 252G 532 99 375323 97 183855 45 1938 99 478149 54 +++++ +++
延迟 33382us 82425us 168ms 12966us 10879us 10208us
版本 1.96 ------顺序创建------ --------随机创建--------
openlink2.radyn.com -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              文件 /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
                 16 5541 46 +++++ +++ +++++ +++ 18407 99 +++++ +++ +++++ +++
延迟 1271us 1055us 1157us 456us 20us 408us

以下是 RAID 10 15k RPM 驱动器的 Bonnie++ 结果:

版本 1.96 ------顺序输出------ --顺序输入- --随机-
并发 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
机器尺寸 K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
openlink2.rady 252G 460 99 455060 98 309526 56 2156 94 667844 70 197.9 85
延迟 37811us 62175us 393ms 75392us 169ms 17633us
版本 1.96 ------顺序创建------ --------随机创建--------
openlink2.radyn.com -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              文件 /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
                 16 12045 95 +++++ +++ +++++ +++ 16851 98 +++++ +++ +++++ +++
延迟 7879us 504us 555us 449us 24us 377us

以下是 SSD 的 dd 结果:

dd if=/dev/zero of=/path/on/ssd bs=1M count=4096 conv=f​​datasync,notrunc
已复制 4294967296 字节 (4.3 GB),12.7438 秒,337 MB/秒

以下是 RAID 10 15k RPM 驱动器的 dd 结果:

dd if=/dev/zero of=/path/on/array bs=1M count=4096 conv=f​​datasync,notrunc
已复制 4294967296 字节 (4.3 GB),8.45972 秒,508 MB/秒

我会发布 Postgres 配置,但很明显 SSD 的性能并不优于 RAID 10 阵列,因此它似乎不适用。

那么 SSD 的性能是否正常?

或者,具有 16 个快速驱动器的 RAID 10 是否如此出色以至于它的性能优于单个 SSD? SSD 的 RAID 10 阵列会很棒,但是每个 2,000 美元,8,000 美元的价格标签很难证明是合理的(除非我们肯定会看到我们希望在现实世界中获得 2 到 5 倍的性能提升)。

================ 更新 ================

事实证明,阵列中有 16 个 SAS 驱动器,而不是 8 个。我认为组合吞吐量是

以下是 iozone 基准测试,可以提供更多信息。RAID10 阵列始终如一地产生更好的结果。RAID 10 中的 4 或 8 个 SSD 可能会击败 SAS 阵列(当然价格高昂)。

SSD 基准测试http://pastebin.com/vEMHCQhR

16 驱动器 RAID-10 基准测试http://pastebin.com/LQNrm7tT

这是 SSD 的 Postgres 配置,以防有人看到任何改进空间以利用 SSD http://pastebin.com/Qsb3Ks7Y

Mar*_*ian 10

我不确定这本身是否是一个问题,因为正如您所看到的,在许多测试中,单个 SSD 驱动器的性能可以胜过 8 磁盘 RAID 10 设置。

几乎所有的测试都表明单个 SSD 驱动器的速度更快:

  • 更好的延迟
  • 较低的 CPU 使用率(如果我在某些情况下正确阅读,则为 44% 与 95%)
  • 每秒的事务数大于 55%
  • 总交易数大于相同的 55%

在单一情况下,SSD 表现优异,那就是顺序写入。我想说的是,这对于批处理来说是最常见的,而不是对于 OLTP 风格的负载。因此,如果您主要进行此类写入,那么现在单个 SSD 可能不是您的解决方案。

而且我们不是在谈论Fusion-IO驱动器(我怀疑它可能会给您带来您期望的下一个级别,但价格上一个级别)。

从多年来不得不使用蹩脚存储的 DBA 的角度来看,这是一个相当大的技术进步,它们似乎工作正常,但也许我的期望太低了。

我希望您的 SSD 在使用更多线程和更高并发性测试基准方面有更多改进,因为这是 SSD 的亮点。所以,如果你可以用重复测试的方式更多的客户和更多的线程,我很好奇关于比较结果。


Con*_*lls 6

几种可能性:

  • 你的机器有很多内存。这可能会满足来自缓存的大部分 I/O 请求,这将或多或少地消除性能上的任何差异。
  • 如果您的 I/O 工作负载主要是顺序的,那么具有大条带大小的 HDD 阵列将提供良好的顺序吞吐量。使用 256k 条带,您可以从 10 个 15k 驱动器的阵列中获得 600MB/秒的速度,这比列出的单个 S3700 的写入性能要快。