データベースサーバーのRAID10構成にbtrfsを実装することを検討していますが、nodatacowオプションについて混乱しています。
https://btrfs.wiki.kernel.org/index.php/Gotchas によると:
ランダムな書き込みが多いファイルは、非常に断片化され(10000以上のエクステント)、HDDでのトラッシングや、SSDまたは大量のRAMを搭載したシステムでのCPU負荷の過度の数秒のスパイクを引き起こす可能性があります。サーバーとワークステーションでは、これはデータベースと仮想マシンイメージに影響します。 nodatacowマウントオプションは、関連する落とし穴とともに、ここで役立つ場合があります。
次に、ドキュメントには、nodatacowオプションは次のように記載されています。
新しく作成されたファイルのデータをコピーオンライトしないでください。既存のファイルは影響を受けません。これにより、チェックサムもオフになります。 IOW、nodatacowはnodatasumを意味します。 datacowは、ユーザーが古いバージョンのファイルまたは新しいバージョンのファイルにアクセスできるようにするために使用されます。 datacowは、ディスクに書き込まれるファイルが部分的に更新されていないことを確認します。 nodatacowは、システム障害時に部分的に更新されたファイルを取得する可能性を犠牲にして、データ(ext [234]など)を直接上書きすることにより、パフォーマンスをわずかに向上させます。ワークロードが大きなデータベースファイルへのランダムな書き込みである場合を除いて、パフォーマンスの向上は通常5%未満であり、その差は非常に大きくなる可能性があります。注:圧縮をオフにします!
これは、データベースサーバーのディスクに対してこのオプションを選択する必要があり、このオプションを使用すると破損チェックサムが無効になることを意味しますか?
これは、データベースサーバーのディスクに対してこのオプションを選択する必要があることを意味しますか?
多分。データベースがファイルシステムに課す変更の量は、コピーオンライトおよびチェックサムプロセスによって増幅されます。 [1] [2]通常のファイルシステム操作でさえ、アクティブなデータベースの速度を著しく低下させる可能性があります。そのため、多くの高性能DBMSがストレージ用のrawディスクをサポートしています。 [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
データベースディレクトリでは、nodatacowオプションを必ず使用する必要があります。書き込みが多いデータベースがある場合、最初に速度が低下し、次にbtrfsファイルシステムが数か月で破壊されます。私はこれを何度も経験しました。 btrfsファイルシステムが読み取り専用になり、大量の断片化が原因で失敗します(そして、現在修正されている可能性のあるバグと、そうでない可能性のあるバグ)。
nodatacowオプションを使用したため、問題は解決しました。データベースは独自のより高度なCOWロジックを実行しているため、データベースでCOWを使用しても意味がありません。はい、データのチェックサムは失われますが、COWを使用することはデータベースにとって有効な選択ではありません。
(マウントオプションに従って)ファイルシステム全体でcowを無効にする必要はありません。データベースディレクトリでのみ無効にするだけで十分です。これを行うには、データベースを停止し、新しいディレクトリを作成し、「chattr + C」を使用してそのディレクトリでCOWを無効にし、すべてのデータベースファイルをコピーします(移動しないでください)。ファイルシステムのアクセス許可を確認してから、新しいdbディレクトリを所定の場所に移動してデータベースを起動します。ディレクトリにchattr + Cを設定すると、新しく作成されたすべての子ディレクトリとファイルのCOWが無効になります。