題 是否應該在數據庫服務器的btrfs中使用nodatacow掛載選項?它會禁用位損壞校驗和嗎?


我正在尋找在數據庫服務器的raid 10配置中實現btrfs,我對nodatacow選項感到困惑。

根據 https://btrfs.wiki.kernel.org/index.php/Gotchas

具有大量隨機寫入的文件可能會變得嚴重碎片化   (10000多個範圍)導致硬盤驅動器和過多的秒數   具有SSD或大量RAM的系統上CPU負載的峰值。上   服務器和工作站會影響數據庫和虛擬機   圖片。 nodatacow掛載選項可能在這裡使用,與相關聯   陷阱。

文檔隨後說明了這一點 nodatacow 選項是:

不要為新創建的文件複製寫入數據,現有文件是   不受影響。這也會關閉校驗和! IOW,nodatacow暗示   nodatasum。 datacow用於確保用戶可以訪問   舊版本的文件,或更新版本的文件。 datacow   確保我們從未將部分更新的文件寫入磁盤。   通過直接覆蓋數據,nodatacow可以略微提升性能   (如ext [234]),代價可能是部分的   有關係統故障的更新文件。性能提升通常<5%   除非工作負載是隨機寫入大型數據庫文件,其中   差異可能會變得非常大。注意:關閉壓縮!

這是否意味著應該為數據庫服務器中的磁盤選擇此選項,並且使用此選項將禁用損壞校驗和?


2
2017-09-14 15:41


起源




答案:


這是否意味著應該為數據庫服務器中的磁盤選擇此選項?
大概。數據庫對文件系統施加的更改量將通過寫時復制和校驗和過程放大。 [1] [2]即使是正常的文件系統操作也會顯著降低活動數據庫的速度,這就是為什麼許多高性能DBMS支持原始磁盤進行存儲的原因。 [3] [4] [5]

使用此選項是否禁用損壞校驗和?
不幸的是,確實如此。 [6]

[1] https://en.wikipedia.org/wiki/Copy-on-write#Copy-on-write_in_computer_storage
[2] https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
[3] https://lists.fedoraproject.org/pipermail/devel/2011-July/154251.html
[4] https://blog.pgaddict.com/posts/friends-dont-let-friends-use-btrfs-for-oltp
[5] https://www.google.com/search?q=btrfs+virtual+machine
[6] https://btrfs.wiki.kernel.org/index.php/FAQ#Can_data_checksumming_be_turned_off.3F


2
2018-03-16 01:12





你應該在數據庫目錄上使用nodatacow選項。如果你有一個包含大量寫入的數據庫,它將首先減速然後在幾個月內銷毀你的btrfs文件系統!我曾多次這樣做過; btrfs文件系統變為只讀和失敗,因為大量的碎片(以及可能現在修復的一個和另一個錯誤,可能不是)。

因為使用nodatacow選項,問題就消失了。在數據庫上使用COW毫無意義,因為數據庫正在使用他們自己的更高級的COW邏輯。是的,您將丟失數據檢查,但使用COW仍然無法選擇數據庫。

你不需要在整個文件系統上禁用cow(按照mount選項),它只能在數據庫目錄上禁用它。為此,請停止數據庫,創建新目錄,使用“chattr + C”禁用COW並複制(不移動!)所有數據庫文件。檢查文件系統權限,然後移動新的db dir並啟動數據庫。 在目錄上設置chattr + C會禁用所有新創建的子目錄和文件上的COW。


1
2018-06-29 08:18