Ubuntu

基於 BTRFS 的 Postgresql 9.6。好主意還是壞主意?

  • January 14, 2020

我只是在準備一台 VM 機器(在 Proxmox 上執行)以在 Ubuntu 16.04 LTS 上執行 postgresql 9.6。這個 postgres 將用於為一家小公司處理 Jira/FisheEye/Confluence 數據庫。通常我們同時是幾個使用者,所以我們不需要調整它以獲得極高的性能/可擴展性。

好吧,情況是我們在伺服器上使用 BTRFS 來幫助我們處理在必要時向 VM 添加額外空間的問題,此外我們還啟用了 lzo 壓縮。此外,我們使用 btrok 將 BTRFS 子卷備份到另一台機器。

我懷疑使用 BTRFS 來處理 postgresql 數據庫文件是否是一個好主意,因為在需要擴展虛擬硬碟空間的情況下我們會非常有幫助,但是我讀到了 postgresql 在 BTRFS 上的不良性能(特別是如果datacow 沒有被禁用。

有人有這種情況的經驗嗎?

一般答案:壞主意。您可以在此處閱讀有關它的一些詳細資訊。長話短說,BTRFS 的 COW 機制會導致正常 OLTP 工作負載的性能不一致

更好的答案:在某些情況下我會使用它。為什麼以及如何:

  • 如果您真的對文件系統施加壓力並為該數據庫中的 FS 執行非常繁重的工作,您只能注意到真正的性能差異。對於具有正常工作負載的 JIRA 和 Confluence 不太可能發生(假設您不在擁有數千名開發人員等的公司中工作),尤其是如果您正確調整和配置它們的記憶體。此外,考慮到您要啟用壓縮,聽起來 IO 性能並不是您主要關心的問題 :)。
  • 考慮到前面的要點、可管理性、與目前工具和環境的良好集成,以及關於您正在使用的技術的現有知識,絕對應該勝過這樣一個事實,即在更高的工作負載下,其他文件系統可以提供更好的性能。
  • 我還會考慮適當調整所有內容以進行補償:在快閃記憶體上執行,進行適當的數據對齊(物理 <-> 控制器 <-> 分區 <-> FS <-> DB),進行適當的 FS(BTRFS 需要比您的投擲更多的維護-in-and-forget-about-it ext4),以及數據庫維護和調整。

我希望它有所幫助。

注意:一位使用者建議可以為特定卷/文件夾的 BTRFS 禁用 COW,我無視這一事實。的確,它可以被禁用,但如果你這樣做了,你為什麼還要使用 BTRFS?- 因為您仍然可以在文件系統的其餘部分和所有其他很酷的功能(如快照和其他東西)上使用 COW,而不會影響 virtualbox 和 postgres 的性能?當然,純 DB 伺服器使用 BTRFS 並禁用 COW 是沒有意義的。但是對於通用機器/伺服器?它允許您使用所有很酷的功能(RAID1,…)而不會影響性能。所以在我眼裡是雙贏的。

引用自:https://serverfault.com/questions/865403