ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 カーネルのチューンアップ・リファレンスマニュアル Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris システムのチューニングの概要
2. Oracle Solaris カーネルチューニング可能パラメータ
3. Oracle Solaris ZFS チューニング可能パラメータ
ZFS ログデバイスまたはキャッシュデバイスとしてのフラッシュデバイスの追加
フラッシュおよび NVRAM ストレージデバイスの適切なキャッシュフラッシュ動作の保証
フラッシュデバイスの SCSI マッピング解除に関する考慮事項
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 データベース用にチューニングすることについての次の推奨事項を検討してください:
最新の Solaris リリースを実行中であることを確認します
Solaris 10 9/10 リリースを最低限の開始点として、最新の Solaris 10 または Solaris 11 リリースを起動します。
必要な場合、ZFS ストレージプール用の LUN を作成します
使用しているストレージアレイ用ツールを使用して、ZFS ストレージプールに提供される LUN を作成します。または、ミラー化された ZFS ストレージプール用にディスク全体を使用することを検討します。詳細については、『Oracle Solaris 11.1 の管理: ZFS ファイルシステム』の第 3 章「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 ファイルシステムを作成し、次のガイドラインを使用して特定のファイルシステムプロパティーを設定します。
128K バイトのデフォルトレコードサイズを使用して、再実行、アーカイブ、取り消し、および一時データベースコンポーネント用のファイルシステムを別々に作成します。一般的な規則は、Oracle データファイルを含むファイルシステムについて、ファイルシステムの recordsize = db_block_size を設定します。表データおよび索引コンポーネントについては、8K バイトのレコードサイズを持つファイルシステムを作成します。また、primarycache プロパティーを使用して、データベースファイルシステムに対するメタデータキャッシュのヒントを提供することも検討してください。ZFS ファイルシステムのプロパティーの詳細については、『Oracle Solaris 11.1 の管理: ZFS ファイルシステム』の「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
デフォルトの 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
別個のログデバイスを使用して、再実行ログ用のストレージプールを作成します。多くのコミットを伴う一般的な 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
再実行プール内に再実行ログ用のファイルシステムを作成します。recordsize および primarycache には、デフォルトのファイルシステムの値を使用します。
# zfs create -o mountpoint=/my_db_path/redo redopool/redo # zfs set logbias=latency redopool/redo
アーカイブプール内に archivelog ファイル用のファイルシステムを作成し、圧縮を有効にして、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
ストレージアレイ入出力キューのチューニングを検討します (HDS または EMC ストレージアレイを持つシステムの場合)
ZFS は読み取りおよび書き込み入出力を集約し、デバイスを処理するドライバレベルにそれを送信する前に入出力の優先度を管理します。zfs_vdev_max_pending パラメータは、ZFS がすべてのストレージプールデバイスに送信する最大の入出力数を定義します。
レガシーのストレージ環境では、ssd_max_throttle および sd_max_throttle パラメータは、ドライバがストレージに送信できる最大の同時入出力数を定義します。zfs_vdev_max_pending のデフォルト値を [s]sd_max_throttle パラメータの値と同じに設定することで、ZFS が入出力を別の不要な SD 層のキューに入れることを回避します。
既存の環境の /etc/system ファイル内に ssd:ssd_max_throttle または sd:sd_max_throttle がある場合、zfs:zfs_vdev_max_pending を同じ値に設定します。たとえば、ストレージアレイ管理者が、次の設定を要求したとします。
set ssd:ssd_max_throttle=20
この場合、このパラメータを次のように設定します。
set ssd:ssd_max_throttle=20 set zfs:zfs_vdev_max_pending=20
このパラメータを設定すると、ZFS が各 LUN のキューを制御できます。つまり、ストレージ内の保留中の入出力の合計数は、次のように拡張できます。
number of LUNs * ZFS_VDEV_MAX_PENDING
十分なメモリーリソースおよびスワップリソースを割り当てます
zfs_arc_max パラメータを低い値にチューニングすることによって ZFS のメモリー消費を削減できますが、データベースで活発に使用される部分についてはメタデータをキャッシュするために十分なメモリーをプロビジョニングすることを推奨します。これは 8K バイトの ZFS レコードでは 1.5% と推定され、大きさに比例して大きいレコードでは増加し、小さいレコードでは減少します。インデックスファイルを保持するファイルシステムは、メモリー不足の場合に最後に無効化されるため、ファイルシステムキャッシングによって最大のメリットを受けます。zfs_arc_max パラメータはバイト単位で、10 進数または 16 進数の値を受け入れます。次の例では、このパラメータを 2G バイトに設定します。
set zfs:zfs_arc_max=2147483648 or set zfs:zfs_arc_max=0x80000000
メモリー不足が原因でアプリケーションが失敗することを防ぐために、ある程度のスワップ空間を構成する必要があります。システムメモリー全体と同等のスワップの量があれば、この目的のためには常に十分です。このスワップ空間は使用される予定はありませんが、予約領域として必要になります。スワップ空間を増やす方法については、『Oracle Solaris 11.1 の管理: ZFS ファイルシステム』の「ZFS スワップデバイスおよびダンプデバイスを管理する」を参照してください。
追加の Oracle データベース構成の推奨事項
次のホワイトペーパーの『Configuring Your Oracle Database on ZFS File Systems』:
http://www.oracle.com/technetwork/server-storage/solaris/config-solaris-zfs-wp-167894.pdf
『Dynamic SGA Tuning of Oracle Database on Oracle Solaris with DISM』ホワイトペーパー:
Oracle 11g インストールガイド
Oracle Database クイックインストレーションガイド 11g リリース 2 (11.2) for Oracle Solaris on SPARC (64-Bit)
http://docs.oracle.com/cd/E11882_01/install.112/e24349/toc.htm
Oracle Database クイックインストレーションガイド 11g リリース 2 (11.2) for Oracle Solaris on x86-64 (64-Bit)
http://docs.oracle.com/cd/E11882_01/install.112/e24351/toc.htm
ZFS を MySQL と一緒に使用するときは、次の考慮事項を確認してください:
ZFS recordsize
OLTP パフォーマンスを高めるには、ZFS recordsize プロパティーをストレージエンジンのブロックサイズに一致させます。
InnoDB
データベースアプリケーションなどの既知のアプリケーションのメモリーフットプリントでは、アプリケーションが ZFS キャッシュから必要なメモリーを繰り返し要求する必要がないように、ARC サイズに上限を設定してもかまいません。
ログ用の別個のプールを作成します。
my.cnf ファイル内にデータおよびログ用の別のパスを設定します。
データファイルを作成する前に、InnoDB データファイルに対して ZFS recordsize プロパティーを 16K に設定し、InnoDB ログについてはデフォルトの recordsize 値を使用します。