数据库服务器(MySQL)在SSD – 修剪命令

我似乎无法find有关在裁剪方面使用SSD上的数据库服务器的许多专家信息。 我知道我可以启用RAID和LVM丢弃,并使用fstrim / cron作业或ext4的discard挂载选项(哪一个取决于写入行为),但是例如MySQL的数据文件只能收缩一个optimize table ,然后你必须启用inno_db_file_per_table 。 在几个100 GB的桌子上, optimize table将需要一段时间,而不是一件容易的事情。

数据库,特别是MySQL,妥善处理丢弃? 他们甚至可以丢弃文件系统认为还包含数据的文件吗?

我知道,没有修剪,几个月后你的performance可能会下降,给你写作放大,所以我的顾虑。

除非你在消费市场上使用价格便宜的固态硬盘,而在100GB +的数据库中,你可能不会这样做,这对你来说不是一个问题。

写放大
你必须做大量的写作,甚至接近限制现代(如在过去12个月内制造的)SSD的有效寿命。 整个行业已经设法提高了电池耐久性,找出需要多less备用区来补偿故障电池,并且彻底固件优化,您应该能够获得至less3年的使用寿命,即使对消费者也是如此硬件。 对于较老的固态硬盘来说,这是事实,但情况已经不复存在。 在大多数情况下,它是从一个较旧的时代剩下的神话。

公平地说,MLC的耐用性仍然是高写入负载的一个因素。 而且,在过去的几年中,我们每天都在谈论相当于多个全盘写入的情况。 如果你在这个表演课上,你可能已经不在“消费者”市场了。

细胞重编程性能命中
或者,你说你需要TRIM / Discard。 这是MLC式固态硬盘众所周知的“缺陷”。 然而,多年来的固件调整缓解了写入这种SSD风格的大部分性能。 SLC驱动器仍然可用,并感谢使MLC驱动器持续时间更长的使用SLC的重要原因不再存在,所以他们现在是非常罕见的。 但是,如果你正在向磁盘写足够小的写入数据来推动MLC的使用寿命,那么SLC设备就开始有意义了。

如果您在数据库驱动器上分配了足够多的未使用空间,则大多数SSD固件都足够智能,可以注意到某些块未被分配,并将其视为额外的备用区域。 当背景碎片整理程序启动时,备用区被重新configuration。 这将保持高性能。 所以在MySQL中缺less块级的丢弃支持并不重要。

对于SSD性能,可以在这个系列的博客文章中find一个很好的总结和一些优秀的参考。

第6章的一般性build议可能与您有关,因为我怀疑TRIM会非常帮助您使用数据库,我认为数据库通常会覆盖块而不是删除那么多的文件。 一个很好的通用性能调优技巧是:

26.过度configuration对于磨损平衡和性能是有用的

只需将驱动器格式化为小于最大物理容量的逻辑分区容量,即可过度调配驱动器。 用户不可见的剩余空间仍然可见并由SSD控制器使用。 过度configuration有助于磨损均衡机制应对NAND闪存单元固有的有限寿命。 对于写入不太重的工作负载,超量configuration的10%到15%就足够了。 对于持续随机写入的工作量,高达25%的过度configuration会提高性能。 过度configuration将充当NAND闪存块的缓冲区,帮助垃圾收集过程吸收峰值的写入。