我不断听到有人想要为他们的数据库获取 SSD。但是,人们通常不想将他们的表放在 SSD 上,而是希望将他们的 DB 日志放在 SSD 上,同时将他们的表放在普通硬盘上。
但为什么会有人想要这样做呢?
日志使用顺序写入。SSD 的顺序 IO 速度并不比普通磁盘快。因此,将日志放在 SSD 上不会提供任何性能提升。
SSD 比普通磁盘快得多的一个领域是随机 IO。那么明智的做法不应该是把你的表放在 SSD 上,同时把日志放在普通磁盘上吗?
我错过了什么吗?
我不断听到有人想要为他们的数据库获取 SSD。但是,人们通常不想将他们的表放在 SSD 上,而是希望将他们的 DB 日志放在 SSD 上,同时将他们的表放在普通硬盘上。
但为什么会有人想要这样做呢?
日志使用顺序写入。SSD 的顺序 IO 速度并不比普通磁盘快。因此,将日志放在 SSD 上不会提供任何性能提升。
SSD 比普通磁盘快得多的一个领域是随机 IO。那么明智的做法不应该是把你的表放在 SSD 上,同时把日志放在普通磁盘上吗?
我错过了什么吗?
是的,与整个数据库相比,事务日志通常*具有恒定但非常低的吞吐量。但是吞吐量绝对是第一优先,当它延迟时,对数据库的所有更新都必须等待。将日志写入镜像甚至 RAID5 在经济上是有利的,但前提是您可以保持写入顺序。如果您与其他任何东西共享磁盘,无论是数据文件、索引还是色情电影集合,您的性能都会受到威胁。
在较大的环境中,问题通常是您有多个数据库实例集中在同一个存储上。当然,您不希望将日志放在同一组驱动器上,因为多个顺序写入组合起来实际上是一次大的随机写入。
一种选择是将单独的镜像(两个磁盘)专用于每个日志序列。但是另一种选择——在某些情况下在经济上是可行的——是让事情变得简单,并为所有日志文件使用单个 SSD,这样你就有了单独的设备和数据路径,并具有良好的随机性能。实际上,多个日志中的任何一个都不会延迟任何数据库。我见过这样的设置,但我不推荐它(SSD 的非易失性对我来说太脆弱的概念)。
[*] - 一些引擎将重做日志与撤消信息混合以使事情复杂化(例如 MS SQL Server)
您总是希望将日志刷新到非易失性存储(无论是盘片还是闪存),而基于 DRAM 的 SSD 可以比硬盘更快地写入。
事务日志应该几乎总是缓存在内存中以提高性能,因此读取速度并没有真正考虑到它。
因此,您应该能够通过将事务日志放在 SSD 上来获得更高的写入吞吐量。
顺便说一句,我曾经尝试将 MySQL innodb 事务日志放在 tmpfs 上,与磁盘相比,性能提升了 10-20%。