NFS
PostgreSQLデータベースは、NFSv3またはNFSv4ファイルシステムでホストできます。最適なオプションは、データベース外の要因によって異なります。
たとえば、特定のクラスタ環境ではNFSv4のロック動作が推奨されます。(参照: "こちらをご覧ください" 詳細はこちら)
それ以外の場合は、パフォーマンスも含めて、データベース機能はほぼ同一である必要があります。唯一の要件は、 hard
マウントオプション。これは、ソフトタイムアウトによって回復不能なIOエラーが発生しないようにするために必要です。
NFSv4がプロトコルとして選択されている場合、NetAppではNFSv4.1の使用を推奨します。NFSv4.1では、NFSv4.0よりも耐障害性が向上するように、NFSv4プロトコルの機能がいくつか拡張されています。
一般的なデータベースワークロードには、次のマウントオプションを使用します。
rw,hard,nointr,bg,vers=[3|4],proto=tcp,rsize=65536,wsize=65536
大量のシーケンシャルIOが予想される場合は、次のセクションの説明に従ってNFS転送サイズを増やすことができます。
NFSテンソウサイス
ONTAPでは、デフォルトでNFS I/Oサイズが64Kに制限されています。
ほとんどのアプリケーションとデータベースでランダムI/Oを実行すると、ブロックサイズがはるかに小さくなり、最大64Kよりもはるかに小さくなります。ラージブロックI/Oは通常並列処理されるため、最大64Kも最大帯域幅の確保に制限されるわけではありません。
一部のワークロードでは、最大64Kに制限があります。特に、バックアップ/リカバリ処理やデータベースのフルテーブルスキャンなどのシングルスレッド処理は、実行回数が少なくても大容量のI/Oを実行できるのであれば、より高速かつ効率的に実行できます。ONTAPに最適なI/O処理サイズは256Kです。
特定のONTAP SVMの最大転送サイズは、次のように変更できます。
Cluster01::> set advanced Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel. Do you want to continue? {y|n}: y Cluster01::*> nfs server modify -vserver vserver1 -tcp-max-xfer-size 262144 Cluster01::*>
注意 |
---|
ONTAPで許容される最大転送サイズを、現在マウントされているNFSファイルシステムのrsize/wsizeの値より小さくしないでください。これにより、一部のオペレーティングシステムでハングしたり、データが破損したりする可能性があります。たとえば、NFSクライアントのrsize / wsizeが65536に設定されている場合は、クライアント自体が制限されているため、ONTAPの最大転送サイズを65536~1048576の間で調整しても効果はありません。最大転送サイズを65536未満に縮小すると、可用性やデータが損傷する可能性があります。 |
転送サイズをONTAPレベルで拡張すると、次のマウントオプションが使用されます。
rw,hard,nointr,bg,vers=[3|4],proto=tcp,rsize=262144,wsize=262144
NFSv3 TCPスロットテーブル
LinuxでNFSv3を使用する場合は、TCPスロットテーブルを適切に設定することが重要です。
TCPスロットテーブルは、NFSv3でホストバスアダプタ(HBA)のキュー深度に相当します。一度に未処理となることのできるNFS処理の数を制御します。デフォルト値は通常16ですが、最適なパフォーマンスを得るには小さすぎます。逆に、新しいLinuxカーネルでTCPスロットテーブルの上限をNFSサーバが要求でいっぱいになるレベルに自動的に引き上げることができるため、問題が発生します。
パフォーマンスを最適化し、パフォーマンスの問題を回避するには、TCPスロットテーブルを制御するカーネルパラメータを調整します。
を実行します sysctl -a | grep tcp.*.slot_table
コマンドを実行し、次のパラメータを確認します。
# sysctl -a | grep tcp.*.slot_table sunrpc.tcp_max_slot_table_entries = 128 sunrpc.tcp_slot_table_entries = 128
すべてのLinuxシステムに sunrpc.tcp_slot_table_entries`ただし、次のようなものがあります。 `sunrpc.tcp_max_slot_table_entries
。どちらも128に設定する必要があります。
注意 |
---|
これらのパラメータを設定しないと、パフォーマンスに大きく影響する可能性があります。Linux OSが十分なI/Oを発行していないためにパフォーマンスが制限される場合もあります。一方では、Linux OSが問題で処理できる以上のI/Oを試行すると、I/Oレイテンシが増加します。 |