PostgreSQL 9.6比BTRFS。 好或坏主意?

我只准备一台VM机器(在Proxmox上运行),通过Ubuntu 16.04 LTS运行postgresql 9.6。 这个postgres将被用来处理一个小公司的Jira / FisheEye / Confluence数据库。 通常我们同时是几个用户,所以我们不需要调整它以获得极高的性能/可伸缩性。

那么就是我们在服务器上使用BTRFS来帮助我们处理在必要时为虚拟机增加额外空间的问题,再加上我们启用了lzo压缩。 另外,我们使用btrok来处理BTRFS子卷到另一台机器的备份。

我怀疑如果可能是一个好主意,使用BTRFS来处理postgresql数据库文件,因为我们将非常有用的情况下,我们需要扩大虚拟硬盘空间,但我读了关于postgresql性能超过BTRFS(特别是如果datacow没有被禁用。

任何人都有这种情况的经验?

一般的答案 :糟糕的主意。 你可以在这里阅读关于它的一些细节。 长话短说,BTRFS的COW机制将导致正常OLTP工作负载的性能不一致

更好的答案 :在某些情况下,我会使用它。 为什么和如何:

  • 你只能注意到真正的性能差异,如果你真的强调文件系统,并在该数据库中运行非常繁重的FS。 JIRA和Confluence不太可能在正常的工作负载下(假设你不是在一个有数千个开发者的公司里工作),尤其是如果你正确地调整和configurationcaching的话。 另外,考虑到你想启用压缩,这听起来不像IO性能是你主要关心的:)。
  • 考虑到以前的项目符号,可pipe理性,与当前工具和环境的良好集成以及有关所使用技术的现有知识,应该肯定胜过这样一个事实:在更高的工作负载下,其他文件系统可以提供更好的性能。
  • 我也会考虑调整一切正确的补偿:在闪存上运行,做适当的数据alignment(物理< – >控制器< – >分区< – > FS < – >数据库),做适当的FS(BTRFS需要更多的维护比你扔在此忘记关于它的ext4)和数据库维护和调整。

我希望它有帮助。

注意 :一个用户build议COW可以针对特定的卷/文件夹禁用BTRFS,我不理会这个事实。 事实上,它可以被禁用,但如果你这样做,为什么你仍然会使用BTRFS? – 因为你仍然可以在文件系统的其余部分使用COW,而在virtualbox和postgres没有任何性能的情况下,所有其他很酷的function(比如快照和东西)都可以使用。 当然,纯数据库服务器使用BTRFS并禁用COW是没有意义的。 但是对于通用机器/服务器? 它可以让你使用所有的酷function(RAID1,…),而不会影响性能。 所以在我眼中是双赢的。