私は、ext4ファイルシステムを備えたUbuntu16.04ワークステーションを持っています。
(注:これまでに遭遇したBtrfsのパフォーマンス関連の主な警告は、noatime
マウントフラグの推奨される使用法だけです。)
通常、Btrfsを
'nodatacow'
オプションでマウントし、コピーオンライトを無効にすることをお勧めします。COWは断片化、ディッシュスラッシング、CPUを引き起こし、RAMスパイクが多い場合はランダム書き込み。
さて、それは本当のダンパーのようです!
質問:Btrfsを使用して高速スナップショットとパフォーマンスの高いMySQLインスタンスの両方を使用できる方法はありますか?
私は自分のコメントを試しましたが、すべてが正常に機能しているようです。より良い代替案はまだ歓迎されています。
これが私がしたことです。
# 1. Initial, onetime setup.
# 1.a) Create a sparse, 20G file.
$ truncate -s 20G disk.20g
# 1.b) Format the loopback device with Btrfs.
$ losetup /dev/loop0 disk.20g
$ mkfs.btrfs /dev/loop0
# 2. Do this every time you wish to actually start using LxD.
# Note: Replace '/dev/loop0' with whatever loop-device is free on your system.
$ Sudo service lxd stop
$ Sudo mkdir -p /var/lib/lxd
$ Sudo mount -o noatime /dev/loop0 /var/lib/lxd
$ Sudo service lxd start
# 3. Do this to gracefully 'shutdown' the effects of Step 2.
$ Sudo service lxd stop
$ Sudo umount /var/lib/lxd
$ losetup -d /dev/loop0
$ Sudo service lxd start
繰り返しになりますが、
disk.20g
上記のファイルはこのファイルシステムにのみ存在します。このファイルシステムは、パフォーマンスがBtrfsによって悪影響を受ける可能性のあるMySQLおよびその他のソフトウェアを引き続きホストできます。断片化は、コピーオンライトで設計されているファイルシステムの大部分が避けられない副作用です。これは、そもそもほぼ無料のファイルシステムスナップショットを可能にするものでもあります。
この理由は非常に単純です。ブロックが変更されるたびに、新しいブロックを元のブロック以外の場所に書き込む必要があります。したがって、ファイルが元々連続していたとしても、変更された後ではありません。
Btrfs nodatacow
がスナップショットとどのように相互作用するかはわかりませんが、データセットにスナップショットを作成すると、フラグに関係なく、少なくとも部分的なコピーオンライト動作が強制されるように感じます。使用する;それ以外の場合、スナップショットを介して古いデータにどのようにアクセスできますか?
ただし、これがMySQLのパフォーマンスに必ずしも深刻な影響を与えるとは限りません次の2つの理由があります。
アイデアを提供するために、私は自分でZFSを実行しています(Btrfsはそこから多くのアイデアを借りています)。現在、スクラブが進行中です。問題のプールは6ディスクのraidz2であり、その優れたパフォーマンスではあまり知られていません。物理的には6つの7200 rpmディスク(2つのSATA、4つのSAS)で支えられており、特に優れたIOPSについては正確には知られていません。 ZFSスクラブは、ディスク上のMerkleツリー全体をナビゲートし、すべてのデータを読み取り、すべてのチェックサムを検証して、すべてが以前に書き込まれたとおりに読み戻されることを確認します。私の場合、途中ですべてのSHA-256ハッシュを計算します。現在のスクラブ速度(最初のメタデータが多い部分を超えた後、重いシークが含まれます)はホバリングしています約200MB /秒そして実際にはゆっくりと上昇しています。これは実際のPlatterI/Oであり、キャッシュは含まれていません(永続ストレージに何があるかを確認する場合、キャッシュは意味をなさないため) 。
確かに、コピーオンライトファイルシステムに移行すると、断片化によるパフォーマンスの低下が見られる可能性が非常に高くなります。しかし、ケーキを食べて保管することもできません。高速で低コストのスナップショットが必要な場合は、スナップショットを取得するために他の何かをあきらめなければならない可能性があります。
あなたの場合はベンチマークです。 Btrfsストレージをセットアップし、そこにMySQLデータベースのコピーを配置して、妥当なワークロードで2つがどのように機能するかを確認します。