为了提高 SQL 性能,为什么不放置大量 RAM 而不是使用更快的硬盘?

use*_*912 31 raid performance memory sql hard-drive

人们一直告诉我,为了提高 SQL 服务器的性能,购买尽可能快的 RAID 5 硬盘等。

所以我在想,与其把所有的钱都花在 RAID 5 和超级快速的硬盘上(顺便说一句,这并不便宜),为什么不直接获得大量 RAM?我们知道 SQL 服务器将数据库加载到内存中。内存比任何硬盘都快。

为什么不在服务器上塞入 100 GB 的内存?那么就使用带有RAID 1 的普通SCSI 硬盘。那不是更便宜和更快吗?

Dan*_*man 51

你的分析很好——在某种程度上——因为它绝对会让事情变得更快。不过,您仍然需要考虑其他几个问题:

  1. 不是每个人都能负担得起足够的内存;当您有数 TB 的数据时,您必须将其放在磁盘上一段时间。如果你没有太多数据,任何东西都足够快。

  2. 数据库的写入性能仍将受到磁盘的限制,因此您可以兑现数据实际存储的承诺。

如果您的数据集很小,或者不需要将其保存在磁盘上,那么您的想法没有错。像VoltDB这样的工具正在努力减少 RDBMS 实现中的旧假设所产生的开销,这些开销限制了纯内存中的性能。

(顺便说一句,人们告诉你使用 RAID-5 来提高数据库性能可能不是很好听的人,因为它几乎从来都不是最好的选择——它具有良好的读取性能,但写入性能很差,并且写入几乎总是生产约束 - 因为您可以将 RAM 放入缓存中以解决大多数读取端性能问题。)

  • @user1034912 - 因用例和用户而异。一般来说,写性能问题更难解决,最终会对整体系统性能施加更大的限制,这意味着当你解决读问题时,他们开始抱怨写问题...... (2认同)
  • @ user1034912,用户通常不会看到写入延迟,因此不知道它们。大多数用户看到的读取延迟是由于查询速度慢,而不是磁盘速度慢。 (2认同)

Mar*_*cin 11

简短版本:考虑工作集大小。长版:你的数据有多大?如果它可以放入现代服务器的内存中,是的,您是绝对正确的。不幸的是,最大的 Xeon 现在可以处理 2TB 的 RAM,而且这不再是那么大的数据集了。如果您无法购买足够大的机器来将您的整个工作集放置在 RAM 中,那么您将不得不用大脑而非钱包来解决问题。


Jon*_*ica 8

如果你想要速度:

  • 增加 RAM,以便至少经常使用的索引可以完全适合 RAM(例如,在我工作的系统上,32GB RAM 足以容纳 350GB 的数据库,因为索引是您在 RAM 中需要的,而不是原始数据)
  • 对任何磁盘使用 RAID10(磁盘越快越好)
  • 避免RAID5
  • 将 mdf、ldf 和 temp DB 拆分到离散的主轴组上(例如:tempdb 在其自己的 RAID1 组上,ldf 在其自己的 RAID1 或 RAID10 主轴组上,mdf 在 RAID 10 组上至少有 4 个磁盘)

遵循这些步骤,SQL Server 就会飞起来。

然后,如果您愿意,可以添加更多 RAM...但首先执行上述操作,您很可能会发现您已经完成了。