os:zfs_tips
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
os:zfs_tips [2020/02/03 10:04] – [swap ボリュームについて] yuichiro | os:zfs_tips [2022/09/13 11:33] (現在) – [atime は off に] yuichiro | ||
---|---|---|---|
行 14: | 行 14: | ||
そのため、後から自分で追加したプールに対して設定が必要となります。 | そのため、後から自分で追加したプールに対して設定が必要となります。 | ||
+ | ただし、 zroot/ | ||
==== プールには必ず空き容量を確保すること ==== | ==== プールには必ず空き容量を確保すること ==== | ||
行 66: | 行 67: | ||
つまり 8GB のメモリを搭載した環境では 7GB まで ARC に使われる可能性があります。 | つまり 8GB のメモリを搭載した環境では 7GB まで ARC に使われる可能性があります。 | ||
- | これを制限するパラメータが sysctl の vfs.zfs.arc_max です。 | + | これを制限するパラメータが sysctl の vfs.zfs.arc.max ((13.0-RELEASE より前は |
アプリケーションにどの程度メモリを空けて置きたいのかを考えて、ARC を制限しましょう。 | アプリケーションにどの程度メモリを空けて置きたいのかを考えて、ARC を制限しましょう。 | ||
行 72: | 行 73: | ||
< | < | ||
- | sysctl vfs.zfs.arc_max=4294967296 | + | sysctl vfs.zfs.arc.max=4294967296 |
</ | </ | ||
行 136: | 行 137: | ||
zfs のバックアップにスナップショットを send & recv するのは定番とも言えますが、 | zfs のバックアップにスナップショットを send & recv するのは定番とも言えますが、 | ||
ファイルシステムの使用量が大きくなるとバックアップに時間がかかるようになります。 | ファイルシステムの使用量が大きくなるとバックアップに時間がかかるようになります。 | ||
- | ひょっとかするとネットワークの不調などで途中で止まってしまうことがあるかもしれません。 | + | ひょっとするとネットワークの不調などで途中で止まってしまうことがあるかもしれません。 |
その場合、最初からやり直すのはとても辛いため、途中からやり直すことができます。 | その場合、最初からやり直すのはとても辛いため、途中からやり直すことができます。 | ||
行 186: | 行 187: | ||
==== PostgreSQL ==== | ==== PostgreSQL ==== | ||
+ | === atime === | ||
+ | atime は off にしましょう。理由は前述の通りです。 | ||
=== record size === | === record size === | ||
行 234: | 行 237: | ||
</ | </ | ||
- | ==== MySQL ==== | + | ==== MySQL (innodb) |
+ | |||
+ | === atime === | ||
+ | |||
+ | atime は off にしましょう。理由は前述の通りです。 | ||
+ | === record size === | ||
+ | |||
+ | データ用とログ用に2つのファイルシステムを用意します。 | ||
+ | データ用には recordsize=16k を、ログ用はデフォルトの recordsize=128k を設定します。 | ||
+ | |||
+ | ^ 用途 ^ recordsize ^ | ||
+ | | データ用 | 16k | | ||
+ | | ログ用 | 128k (default) | | ||
+ | |||
+ | innodb はデータの読み書きを一度に 16k ずつ行うため、それに合わせます。 | ||
+ | ログ用は追記のためデフォルトのままでかまいません。 | ||
+ | |||
+ | === log bias === | ||
+ | |||
+ | innodb でもログを先行書き込みしますので zfs でログを書き込む必要はないとも言って良いでしょう。 | ||
+ | データ用のファイルシステムに対し logbias=throuput を設定し zfs のログの書き込みを OFF にします。 | ||
+ | ログ用については失われると困るため、デフォルトのまま logbias=latency が良いでしょう。 | ||
+ | |||
+ | ^ 用途 ^ logbias ^ | ||
+ | | データ用 | throuput | | ||
+ | | ログ用 | latency (default) | | ||
+ | |||
+ | === primary cache === | ||
+ | |||
+ | MySQL もアプリケーション側で必要なデータをメモリ内にキャッシュします。 | ||
+ | こちらを十分に効かせれば ZFS でキャッシュさせる必要性は低くなりますので、 | ||
+ | primarycache=metadata を設定し、メタデータのキャッシュのみを行うようにします。 | ||
+ | |||
+ | データ用、ログ用、どちらにも言えます。 | ||
+ | |||
+ | ^ 用途 ^ primarycache ^ | ||
+ | | データ用 | metadata | | ||
+ | | ログ用 | metadata | | ||
+ | |||
+ | === compression === | ||
+ | |||
+ | lz4 による圧縮は非常に高速に動作します。 圧縮率はそれほど良くはありませんが、半分程度に圧縮されれば、見た目のスループットは2倍に向上します。圧縮率が悪くても lz4 が高速に動作するためペナルティが少なく、設定するメリットは十分にあります。 | ||
+ | |||
+ | データ用、ログ用ともに compression=lz4 を設定しておくと良いでしょう。 | ||
+ | |||
+ | ^ 用途 ^ compression ^ | ||
+ | | データ用 | lz4 | | ||
+ | | ログ用 | lz4 | | ||
+ | |||
+ | === skip_innodb_doublewrite === | ||
+ | |||
+ | my.cnf に skip_innodb_doublewrite を設定し MySQL にデータを2回書く処理を止めさせます。 | ||
+ | |||
+ | これはもともと 16k のデータの内、半分の 8k だけはディスクに書かれたが残りの 8k は書かれていないようなタイミングで電源喪失などが発生した際にそれを検知するためのものです。 | ||
+ | Copy On Write の ZFS ではどのようなタイミングでもこういう事にはならないため、単純に OFF にすることができます。 | ||
+ | 2回の書き込みが1回に減る分、性能向上が期待できます。 | ||
+ | |||
+ | ==== MySQL (MyISAM) ==== | ||
+ | |||
+ | === atime === | ||
+ | |||
+ | atime は off にしましょう。理由は前述の通りです。 | ||
+ | === record size === | ||
+ | |||
+ | MyISAM は一度に 8k ずつデータを読み書きしますので、recordsize=8k を指定します。 | ||
+ | ログ用にディレクトリを分けることができませんので、データ用に合わせます。 | ||
+ | |||
+ | === primary cache === | ||
+ | |||
+ | MyISAM でもアプリケーション側で必要なデータをメモリ内にキャッシュします。 | ||
+ | primarycache=metadata で zfs の arc 使用量を制限し、アプリケーション側で使えるメモリを増やします。 | ||
+ | |||
+ | === log bias === | ||
+ | |||
+ | データとログが同じファイルシステムに置かれるため、安全のためデフォルトのまま logbias=latecy にするのが良いでしょう。 | ||
+ | |||
+ | === compression === | ||
+ | |||
+ | lz4 で得られるメリットは innodb と同じです。 | ||
- | < | ||
os/zfs_tips.1580691872.txt.gz · 最終更新: 2020/02/03 10:04 by yuichiro