为什么有人想把数据库日志放在SSD上?

我一直听到有人想为他们的数据库获得SSD。 但是,不是把他们的桌子放在SSD上,而是常常想把他们的数据库日志放在SSD上,而把他们的桌子放在普通的硬盘上。

但为什么有人想这样做?

日志使用顺序写入。 而SSD的顺序IO速度并不比普通磁盘快。 所以把日志放在SSD上不会带来任何性能上的提升。

SSD比常规磁盘快得多的一个领域是随机IO。 所以不应该做的事情是把你的表放在SSD上,而把日志保留在普通磁盘上?

我错过了什么吗?

是的,与整个数据库相比,事务日志通常*具有恒定的吞吐量。 但吞吐量绝对是第一优先,当它被延迟时,数据库的所有更新都必须等待。 将日志写入镜像,甚至写入RAID5在经济上是有益的,但是只要您可以连续写入即可。 如果您与其他任何人共享磁盘,无论是数据文件,索引还是色情电影集合,都会使您的性能处于风险之中。

在较大的环境中,通常情况下,您将多个数据库实例集中在同一个存储上。 当然,您不希望将日志放在同一组驱动器上,因为多个顺序写入组合实际上是一个大的随机写入。

一种select是为每个日志序列分配一个镜像(两个磁盘)。 但是另一种select – 在某些情况下是经济上可行的 – 就是保持简单,并为所有的日志文件使用单个SSD,这样你就可以拥有独立的设备和数据path,并具有良好的随机性能。 实际上,多个日志中的任何一个都不会延迟任何数据库。 我已经看到了这样的设置,但我不推荐它(SSD的非挥发性对我来说太脆弱了)。

一些引擎将重做日志与撤消信息混合在一起使事情复杂化(例如MS SQL Server)

您总是希望将日志刷新到非易失性存储(即盘片或闪存),基于DRAM的SSD比硬盘写入速度更快。

事务日志几乎总是被caching在内存中以提高性能,所以读取速度并不是真正的事情。

所以,将事务日志放在SSD上应该能够获得更高的写入吞吐量。

另外,我曾经试过将MySQL innodb事务日志放在tmpfs上,与磁盘相比,性能提升了10-20%。