ZFS をデータベース製品と一緒に使用するとき、次の考慮事項を検討してください:
データベースで入出力に固定ディスクブロックまたは固定レコードサイズを使用している場合、ZFS recordsize プロパティーをこれに一致するように設定してください。複数のファイルシステムが単一プールを共有している場合であっても、ファイルシステム単位で実行できます。
ZFS の copy-on-write 設計により、recordsize を低くチューニングすることは、バッチレポートクエリーを犠牲にして OLTP パフォーマンスを改善する方法です。
ZFS は、ディスク上に格納されているすべてのブロックにチェックサムを実行します。これにより、データベース層でデータのチェックサムを追加して行う必要性が軽減されます。データベース層の代わりに ZFS によってチェックサムを計算する場合は、データがアプリケーションに戻される前に矛盾を捕捉して修正することができます。
UFS の設計の一部の不備を克服し、データのダブルバッファリングを除去するために、UFS 直接入出力が使用されます。ZFS では、UFS の設計の不備は存在せず、ZFS は primarycache および secondarycache プロパティーを使用して ARC 内のバッファリングデータを管理します。secondarycache (L2ARC) プロパティーを使用してランダム読み取りを改善するためには、primarycache プロパティーも有効にする必要があることに注意してください。
プールのパフォーマンスを維持するには、プール領域の使用率を 90% 以下に維持してください。
ZFS は単一インスタンスモードのすべての Oracle データベースバージョンについて推奨されます。ZFS は、Oracle RAC データベースが NFS 共有ファイルシステムとして使用可能な場合、これと一緒に使用できます。
ZFS を Oracle データベース用にチューニングすることについての次の推奨事項を検討してください:
最新の Oracle Solaris リリースを実行中であることを確認します。
Oracle Solaris 10 9/10 リリースを最低限の開始点として、最新の Oracle Solaris 10 または Oracle Solaris 11 リリースを起動します。
必要な場合、ZFS ストレージプール用の LUN を作成します。
使用しているストレージアレイ用ツールを使用して、ZFS ストレージプールに提供される LUN を作成します。または、ミラー化された ZFS ストレージプール用にディスク全体を使用することを検討します。詳細は、Oracle Solaris 11.3 での ZFS ファイルシステムの管理 の 第 5 章, Oracle Solaris ZFS ストレージプールの管理を参照してください。
表、索引、取り消し、および一時データ用のデータファイルのストレージプールを作成します。
より高いレベルのデータ冗長性を提供するために、ミラー化されたストレージプールの作成を検討してください。例:
# zpool status dbpool pool: dbpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM dbpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t5000C500335F95E3d0 ONLINE 0 0 0 c0t5000C500335F907Fd0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t5000C500335BD117d0 ONLINE 0 0 0 c0t5000C500335DC60Fd0 ONLINE 0 0 0 errors: No known data errors
多くのコミットを伴う一般的な OLTP データベースなど、再実行ログアクティビティーが多いデータベースの場合、別個のログデバイス用に別個の LUN を使用します。
archivelog 用のストレージプールを作成します。
使用可能な場合は、システムの内部ディスクがこのタイプの負荷を処理できます。archivelog ファイルシステムは dbpool 内のファイルシステムとすることもできます。
# zpool create archivepool c0t5000C500335E106Bd0
ZFS ファイルシステムを作成し、次のガイドラインを使用して特定のファイルシステムプロパティーを設定します。
再実行、アーカイブ、取り消し、および一時データベースコンポーネントのための個別のファイルシステムを作成し、recordsize に 1M を指定します。
一般的な規則は、Oracle データファイルを含むファイルシステムについて、ファイルシステムの recordsize = db_block_size を設定します。表データおよび索引コンポーネントについては、8K バイトのレコードサイズを持つファイルシステムを作成します。また、primarycache プロパティーを使用して、データベースファイルシステムに対するメタデータキャッシュのヒントを提供することも検討してください。ZFS ファイルシステムのプロパティーの詳細は、Oracle Solaris 11.3 での ZFS ファイルシステムの管理 の 第 7 章, Oracle Solaris ZFS ファイルシステムの管理を参照してください。
8K バイトの recordsize を使用して、表データファイルおよび索引データファイル用のファイルシステムを作成します。primarycache のデフォルト値を使用します。
# zfs create -o recordsize=8k -o mountpoint=/my_db_path/index dbpool/index # zfs set logbias=throughput dbpool/index # zfs get primarycache,recordsize,logbias dbpool/index NAME PROPERTY VALUE SOURCE dbpool/index primarycache all default dbpool/index recordsize 8K local dbpool/index logbias throughput local
一時表スペースおよび undo 表スペース用のファイルシステムを作成します。
Oracle Solaris 11 以前のリリースでは、recordsize および primarycache のデフォルト値を使用します。
# zfs create -o mountpoint=/my_db_path/temp dbpool/temp # zfs set logbias=throughput dbpool/temp # zfs create -o mountpoint=/my_db_path/undo dbpool/undo # zfs set logbias=throughput dbpool/undo
Oracle Solaris 11.1 以降のリリースでは、次の recordsize およびデフォルトの primarycache 値を使用します。
# zfs create -o recordsize=1m -o mountpoint=/my_db_path/temp dbpool/temp # zfs set logbias=throughput dbpool/temp # zfs create -o recordsize=1m -o mountpoint=/my_db_path/undo dbpool/undo # zfs set logbias=throughput dbpool/undo
別個のログデバイスを使用して、再実行ログ用のストレージプールを作成します。多くのコミットを伴う一般的な OLTP データベースなど、再実行ログアクティビティーが多いデータベースの場合、別個のログデバイス LUN を使用します。
ディスクを 2 つのスライスにパーティション分割し、64M バイト から 150M バイトの範囲の小さいスライス s0 を、別個のログデバイス用にします。s1 スライスには、再実行ログ用の残りのディスク容量が入ります。
# zpool create redopool c0t50015179594B6F11d0s1 log c0t50015179594B6F11d0s0 # zpool status redopool pool: redopool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM redopool ONLINE 0 0 0 c0t50015179594B6F11d0s1 ONLINE 0 0 0 logs c0t50015179594B6F11d0s0 ONLINE 0 0 0 errors: No known data errors
再実行プール内に再実行ログ用のファイルシステムを作成します。
Oracle Solaris 11 以前のリリースでは、recordsize および primarycache のデフォルトのファイルシステム値を使用します。
# zfs create -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
Solaris 11.1 以降のリリースでは、recordsize およびデフォルトの primarycache 値を使用します。
# zfs create -o recordsize=1m -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
アーカイブプール内にアーカイブログファイル用のファイルシステムを作成します。
Oracle Solaris 11 以前のリリースでは、recordsize のデフォルト値を使用して圧縮を有効化し、primarycache を metadata に設定します。
# zfs create -o compression=on -o primarycache=metadata -o mountpoint= /my_db_admin_path/archive archivepool/archive # zfs get primarycache,recordsize,compressratio,compression,available, used,quota archivepool/archive NAME PROPERTY VALUE SOURCE archivepool/archive primarycache metadata local archivepool/archive recordsize 128K default archivepool/archive compressratio 1.32x - archivepool/archive compression on local archivepool/archive available 40.0G - archivepool/archive used 10.0G - archivepool/archive quota 50G local
Solaris 11.1 以降のリリースでは、圧縮を有効化し、primarycache を metadata に設定して、次の recordsize 値を使用します。
# zfs create -o compression=on ???o recordsize=1M \ -o mountpoint=/my_db_admin_path/archive archivepool/archive # zfs get primarycache,recordsize,compressratio,compression,\ available,used,quota archivepool/archive NAME PROPERTY VALUE SOURCE archivepool/archive primarycache all local archivepool/archive recordsize 1M local archivepool/archive compressratio 1.32x - archivepool/archive compression on local archivepool/archive available 40.0G - archivepool/archive used 10.0G - archivepool/archive quota 50G local
データベースファイルシステムが稼働するのに十分なディスク領域が確保されるように割り当て量を設定し、データベースファイルシステムのスナップショットをとることを検討します。また、ダミーファイルシステム上に予約領域を設定して、プールのパフォーマンスを維持するため 10 - 20% のプールスペースを予約します。
# zfs set reservation=20gb dbpool/freespace
ストレージアレイとメモリーリソースのチューニングに関する追加の情報については、http://www.oracle.com/technetwork/server-storage/solaris/config-solaris-zfs-wp-167894.pdf にあるホワイトペーパーを参照してください。
追加の Oracle データベース構成の推奨事項
http://www.oracle.com/technetwork/server-storage/solaris/config-solaris-zfs-wp-167894.pdf にあるホワイトペーパー内の ZFS ファイルシステムでの Oracle データベースの構成に関する項目。
DISM を使用した Oracle Solaris での Oracle データベースの動的 SGA チューニングに関するホワイトペーパー (http://www.oracle.com/technetwork/articles/systems-hardware-architecture/using-dynamic-intimate-memory-sparc-168402.pdf)。
Oracle 11g インストールガイド
ZFS を MySQL と一緒に使用するときは、次の考慮事項を確認してください:
ZFS recordsize
OLTP パフォーマンスを高めるには、ZFS recordsize プロパティーをストレージエンジンのブロックサイズに一致させます。
InnoDB
データベースアプリケーションなどの既知のアプリケーションのメモリーフットプリントでは、アプリケーションが ZFS キャッシュから必要なメモリーを繰り返し要求する必要がないように、ARC サイズに上限を設定してもかまいません。
ログ用の別個のプールを作成します。
my.cnf ファイル内にデータおよびログ用の別のパスを設定します。
データファイルを作成する前に、InnoDB データファイルに対して ZFS recordsize プロパティーを 16K に設定し、InnoDB ログについてはデフォルトの recordsize 値を使用します。