我正在考虑在数据库服务器的 raid 10 配置中实现 btrfs,但我对 nodatacow 选项感到困惑。
根据https://btrfs.wiki.kernel.org/index.php/Gotchas:
具有大量随机写入的文件可能会变得严重碎片化(超过 10000 个范围),导致 HDD 损坏,并在具有 SSD 或大量 RAM 的系统上导致 CPU 负载出现过多的多秒峰值。在服务器和工作站上,这会影响数据库和虚拟机映像。 nodatacow 安装选项可能在这里有用,并有相关的陷阱。
该文档然后指出诺达塔牛选项是:
不要为新创建的文件复制写入数据,现有文件不受影响。这也会关闭校验和! IOW,nodatacow 意味着 nodatasum。 datacow 用于确保用户可以访问文件的旧版本或文件的新版本。 datacow 确保我们永远不会将部分更新的文件写入磁盘。 nodatacow 通过直接覆盖数据(如 ext[234])提供轻微的性能提升,但代价是在系统故障时可能会部分更新文件。性能增益通常小于 5%,除非工作负载是随机写入大型数据库文件,这种情况下差异可能会变得非常大。注意:关闭压缩!
这是否意味着应该为数据库服务器中的磁盘选择此选项,并且使用此选项将禁用损坏校验和?
答案1
是的,这对于数据库来说通常是一个好主意,是的,它确实禁用了校验和(出于同样的原因,它禁用了内联压缩,并且一旦实现,也可能会禁用加密)。
也就是说,通常最好不要使用它挂载整个文件系统,而是在通过运行创建数据库文件之前标记将存储数据库文件的目录chattr +C
。该特定属性与挂载选项具有相同的效果nodatacow
,但基于每个文件进行操作,并且是从创建文件的目录继承的。