HugePage を設定する際の Oracle Database へのメリットと注意点

*以下は、サポート契約締結中のお客さまに2018年11月に配信したサポートレターより一部抜粋して掲載しています。

はじめに

昨今ではサーバの搭載メモリも大容量化しており、当サポートセンターにおいてもOracle Database のインストールにおいて HugePage の設定に関するお問合せを承ることがございます。そこで、今回は Oracle Database を導入する際の HugePage の設定について、メリットや注意点をご紹介します。

HugePage とは

Linux OS のメモリ管理においては『仮想記憶』と呼ばれる仕組みが利用されており、ユーザプロセスがメモリにアクセスする際は『仮想アドレス』(プロセスから見えるメモリのアドレス)と『物理アドレス』(搭載されたメモリの実際のアドレス) の変換が行われて おります。この仮想記憶の仕組みにより、各プロセスで利用するアドレス空間が独立して確保され、不正なメモリ領域へのアクセス防ぎます。

上述の仮想アドレスと物理アドレスの変換を行う際に『ページテーブル』と呼ばれる表が使用されており、ページテーブル内の 1 ページに対応するデータ(仮想アドレスと物理アドレスの対応情報)を『ページテーブルエントリ』と呼びます。

ページテーブルのページサイズはデフォルトですと 4 KB となっておりますが、HugePage は、それよりも大きなページサイズ (デフォルトで 2 MB) で管理する機能となっており、大規模な物理メモリを搭載したサーバなどでは、主にパフォーマンス面でのメリットがあるとされています。

※ HugePage の詳細に関しては、OS のサポートにご確認ください。

HugePage を設定するメリット

HugePage を有効化することで一般的に OS レイヤーでは以下のようなメリットがあるとされています。

ページテーブル処理の削減

HugePage では、デフォルトのページよりも大きなサイズでメモリ空間を管理します。そのため、デフォルトのページサイズ(4 KB)よりもページヒット率が高くなり、仮想アドレスから物理アドレスへ変換するための CPU オーバヘッドが軽減されます。

ページ数自体の削減

ページテーブルはカーネルのメモリ空間で管理されており、プロセス毎にページテーブルも生成されます。HugePage では 1 エントリー(ページ)で管理できるメモリ情報が大きくなりますので、ページ数が削減され、ページテーブル管理のためのメモリ使用量も減少します。(カーネルのメモリ空間を効率よく利用できます。)

HugePage 有効化した場合スワップされない

一般的に記憶域に退避されるスワップ処理は高速ではなく、多くのアプリケーションにおいて、スワップを回避する事は重要となります。HugePage を有効化した際の副次的な効果として、HugePage はスワップされないといった点も上げられます。つまり、HugePage の設定はプロセスに割当てるメモリ領域を物理メモリ上に固定させるといった効果が得られるとされています。

仮想環境との相性が良い

こちらは少し OS レイヤーとは別観点の利点となります。仮想環境においては、メモリ割り当て要求が大きな単位である方が、仮想ソフトウェア(ハイパーバイザー)の負荷が軽くなる傾向があり、仮想マシン(ゲストマシン)にて HugePage を利用することで  仮想環境においてもパフォーマンスの向上が期待できると言われております。

上記は殆どが OS レイヤーでのメリットとなりますが、一般的に Oracle Database のような OS のメモリ管理に左右されるソフトウェアにおいては、HugePage を設定することにより、結果として、該当ソフトウェアにおいてもパフォーマンスの向上が期待できます。

Oracle Database で HugePage を使用する際の注意点

ただし HugePage を設定する際の Oracle Database 観点における注意点としては、自動メモリ管理が利用不可となる事です。

具体的には HugePage が有効化されている環境においては Oracle Database 11g から導入されている自動メモリ管理 (AMM) のパラメータ MEMORY_TARGET や MEMORY_MAX_TARGET を 0 以外に設定すると、下記のようなエラーが発生致します。

ORA-00845 : MEMORY_TARGET not supported on this system

Oracle Database 11g 以降のバージョンで HugePage を有効にする場合は、自動メモリ管理以外のパラメータ(SGA_TARGET など)の設定をご検討下さい。

また HugePage を設定する際に /etc/security/limits.conf ファイルに ASM の管理者アカウント (grid ユーザー等) を記述することにより、ASM インスタンスのメモリ(SGA)確保においても HugePage を有効化することが可能です。

しかしながら、通常 ASM インスタンスで実行されるタスク量はデータベースインスタンスよりも少ないため、ASM の使用メモリが大きく増加する事はございません。そのため、ASM インスタンスにおいては HugePage 有効化における恩恵が少なく 自動メモリ管理を設定することが推奨されております。

尚、HugePage は動的に設定することが可能ですが、OS の再起動を実施しない場合、必ずしも指定した量が確保されるとはかぎりません。確実に設定を反映頂くには OS の再起動が必要となりますので、既に稼働中の本番環境にて HugePage を設定される際はサービスの停止、(HA や RAC 構成であれば)縮退が伴う点も併せてご注意ください。

参考ドキュメント

尚、Oracle Exadata にて HugePage を使用する際は、下記の Best Practices も併せてご参照ください。

まとめ

今号では HugePage を使用するにあたっての Oracle Database のメリット、注意点を紹介させていただきました。Oracle Database のパフォーマンス向上を検討する上で、ご活用頂けますと幸いです。

(オラクル事業部 サポート・サービス担当 中島)

HugePage を設定する際の Oracle Database へのメリットと注意点