Oracle Database管理者リファレンス 11gリリース1(11.1) for Linux and UNIX-Based Operating Systems E05786-05 |
|
![]() 戻る |
![]() 次へ |
Oracle Database for Linux 32-bitは、Very Large Memory(VLM)構成をサポートします。この構成を使用すると、Oracle Databaseは、これまでLinuxアプリケーションで使用可能だった4GBを超えるRAMにアクセスできます。Oracle VLMオプションは、大規模なデータベース・バッファ・キャッシュを作成するために使用されます。VLMモードでコンピュータを実行するには、Linuxでの設定を変更する必要があります。また、使用できる機能およびinit.oraパラメータにいくつかの制限が課せられます。
注意: この付録は、Linux x86にのみ適用されます。 |
この付録では、次の項目について説明します。
Oracleデータベースに関連付けられた基本メモリー構造には、システム・グローバル領域(SGA)とプログラム・グローバル領域(PGA)が含まれます。SGAは、SGAコンポーネントと呼ばれる共有メモリー構造のグループで、1つのOracleデータベース・インスタンスのデータおよび制御情報を保持します。SGAは、すべてのサーバーおよびバックグラウンド・プロセスで共有されます。PGAは、サーバー・プロセスのデータおよび制御情報を保持するメモリー領域です。
この項では、次の項目について説明します。
32ビット・コンピュータのシステム・グローバル領域の制限を拡大するには、初期化パラメータDB_BLOCK_BUFFERS
およびSHARED_POOL_SIZE
に、Oracleデータベース用に選択した値を手動で設定する必要があります。インスタンスのブロック・サイズを選択するには、初期化パラメータDB_BLOCK_SIZE
を使用します。バッファのキャッシュ・サイズは、初期化パラメータDB_BLOCK_BUFFERS
によって設定されます。
通常の32ビットLinuxカーネルでは、4GBのアドレス空間を3GBのユーザー空間と1GBのカーネルに分割します。
For Example: Let us consider a configuration with three GB user sapce and one GB Kernel. On normal kernel we have the following default memory layout for every process: 1.0 GB Text code 1.7 GB Available process memory for address space 0.3 GB Stack 1.0 GB Kernel
この例から、1.7GBをSGAとして使用できることがわかります。これは、共有プールで効果的に使用できます。
1GBカーネルのアドレス可能空間には、次のメモリー・ゾーンがあります。
このゾーンは、物理メモリーの最初の16MBにマップされます。一部のデバイスは、このゾーンをデータ転送に使用します。
このゾーンは、物理メモリーの16〜896MBにマップされます。これはロー・メモリーゾーンとも呼ばれます。このゾーンはカーネル空間に永久的にマップされます。カーネル・リソースの大半がこの空間に存在し、ここから操作できるため、パフォーマンスへの影響が大きいゾーンです。そのため、カーネル・リソースを大量に消費するアプリケーションを実行すると、ロー・メモリーに負担がかかる可能性があります。ロー・メモリーの不足は、パフォーマンスの低下やシステム・ハングの原因にもなります。
Linuxは、アドレス空間に直接マップされていないメモリーにアクセスできません。カーネルは、仮想アドレス空間に物理ページをマップしなければ、1GBを超えるメモリーを使用できません。カーネルはZONE_NORMALゾーンにこれらのページをマップして、ZONE_HIGHMEMゾーンのページにアクセスします。
10gから、SGA_TARGET
パラメータが導入され、共有プール、Javaプール、ラージ・プールおよびデータベース・バッファ・キャッシュなどのデータベース・パラメータの自動チューニングが容易になりました。自動チューニングの対象となるメモリー・コンポーネントのサイズを増減するには、SGA_TARGET
パラメータを0以外の値に設定する必要があります。
11gでは、この機能が見直され、SGAおよびPGAメモリー・コンポーネントの自動チューニングを容易にするMEMORY_TARGET
という新しいパラメータが導入されました。
VLMでは、動的SGAおよびマルチ・ブロック・サイズはサポートされません。システムでVLMを有効にするには、SGA_TARGET
またはMEMORY_TARGET
の値を0に設定する必要があります。システムでVLMが有効な場合、データベース・バッファ・キャッシュに追加のメモリーを使用できます。
注意: システムにVLMを実装する前に、同じシステム上のSGA_TARGET またはMEMORY_TARGET パラメータの設定を解除することをお薦めします。 |
32ビット・コンピュータでSGAの制限を拡大するには、次の方法があります。
Linux hugemem
カーネルを使用すると、大規模なメモリー・システムを使用できます。これにより、最大3.6GBのSGAを作成できます。hugemem
カーネルでは、カーネル空間とユーザー空間に各4GBのアドレス空間を使用できます。32ビット・コンピュータでは、使用可能な4GBのアドレス空間を、3GBの仮想メモリー空間(ユーザー定義プロセスの実行に使用できる空間)と、1GBのカーネル空間に分割します。ただし、SGAのサイズを増加するには、hugememカーネルを使用する必要があります。
hugemem
カーネルは、32ビット・カーネルが仮想アドレス空間の4GB制限を超えて16GBのメモリーにアクセスするのをサポートし、最大64GBの物理メモリーをサポートします。アドレス空間の切替えによるパフォーマンスのオーバーヘッドと比較して、hugemem
カーネルは大容量のコンピュータの安定性を向上します。このカーネルは、1プロセス当たり4GBのユーザー空間(他のカーネルの場合は3GB)、および4GBの直接カーネル空間をサポートします。hugemem
カーネルは、メイン・メモリーが4GBを超えるマルチプロセッサ・コンピュータにソフトウェアをインストールする場合に使用します。また、少ないメモリーで稼働する構成にも効果があります。
次のコマンドを実行すると、hugememカーネルを使用しているかどうかを判別できます。
$ uname -r 2.6.9-5.0.3.ELhugemem
For Example: Let us consider a configuration with four GB user sapce and four GB Kernel. If we lower the SGA attach address, then it results in 3.42 GB process memory: 3.42 GB Available process memory for address space 0.25 GB Kernel "trampoline" 0.33 GB Sga base 4.00 GB Kernel
Oracleデータベースは、hugemem
を使用する32ビットのPhysical Address Extension(PAE)システムで、共有メモリー・ファイル・システムを使用できます。これはVery Large Memory(VLM)と呼ばれる機能です。VLMは、SGAを1.7GBから62GBに増加できます。ただし、ユーザー空間アドレスは4GBに制限されます。
Oracleで共有メモリー・ファイル・システムを使用するには、VLM機能を有効にする必要があります。この機能は、SGAのバッファ・キャッシュをSystem Vの共有メモリーから共有メモリー・ファイル・システムに移動します。RHEL4/OEL4でVLMオプションを使用して大規模なバッファ・キャッシュを作成するには、次の2つのオプションがあります。
shmfs
の使用: 特定のサイズのshmfs
を/dev/shm
にマウントし、適切な権限を設定します。RHEL4/OEL4で、shmfs
によって割り当てられたメモリーはページング可能です。
ramfs
の使用: ramfs
は、shmfs
に類似していますが、ページングまたはスワッピングできないという点が異なります。この方法を使用すると、一般に望ましい効果が得られます。ramfs
を作成するには、mount -t ramfs ramfs /dev/shm
(先にunmount /dev/shm
)を使用します。ここでの唯一の違いは、ramfs
ページには、ラージ・ページのサポートがないことです。
注意: VLMサポートを使用するデータベース・インスタンスの初期化パラメータ・ファイルに、USE_INDIRECT_DATA_BUFFERS =TRUE を設定する必要があります。このパラメータを設定しないと、Oracle Database 11gリリース1(11.1)以上の動作が、以前のリリースとまったく同じになります。 |
64GBのRAMを搭載した32ビット・コンピュータで、SGAを約62GBまで増加できます。VLM構成では、メモリー内にキャッシュするデータベース・バッファが増加し、データベース・パフォーマンスが改善されます。その結果、VLMを使用しない構成と比較して、ディスクI/Oが減少します。プロセッサのPage Address Extension(PAE)機能により、64GBのRAMの物理アドレッシングが可能になります。ただし、PAEでは、4GBを超える場合、プログラムはアドレスに直接アクセスできません。そのため、サイズが4GB以上の場合は、プログラムを共有メモリーに直接アタッチできません。カーネルでサポートされる仮想メモリーと同じサイズの共有メモリー・ファイル・システムを作成すると、この問題を解決できます。この共有ファイル・システムを使用して、プログラムをこのファイル・システムの領域に動的にアタッチできます。共有メモリー・ファイル・システムを使用すると、Oracleなどの大規模なアプリケーションが、32ビット・コンピュータで大容量の共有メモリーにアクセスできるようになります。
VLMでは、512MBの非バッファ・キャッシュSGAをVLM自体の管理に使用します。このメモリー領域は、共有メモリー・ファイル・システム・バッファなどの間接データ・バッファをプロセス・アドレス空間にマップする際にVLMによって使用されます。
たとえば、2.5GBの共有プール用の非バッファ・キャッシュSGAがある場合、2GBの非バッファ・キャッシュSGAが共有プール、ラージ・プールおよびREDOログ・バッファに使用されます。残りの512MBの非バッファ・キャッシュは、VLMの管理に使用されます。
コンピュータにVLMを構成するには、次の手順を実行します。
root
ユーザーでログインします。
sudo -sh Password:
/etc/rc.local
ファイルを編集し、次のエントリを追加して、コンピュータの起動時にramfs
が/dev/shm
ディレクトリにマウントされるようにコンピュータを構成します。
umount /dev/shm mount -t ramfs ramfs /dev/shm chown oracle:oinstall /dev/shm
このコマンドで、oracle
はOracleソフトウェア・ファイルの所有者、oinstall
はOracle所有者アカウントのグループです。
サーバーを再起動します。
root
ユーザーでログインします。
次のコマンドを実行して、/dev/shmディレクトリにramfsタイプがマウントされていることを確認します。
# mount | grep shm ramfs on /dev/shm type ramfs (rw)
次のコマンドを実行して、/dev/shm
ディレクトリの権限を確認します。
# ls -ld /dev/shm drwxr-xr-x 3 oracle oinstall 0 Jan 13 12:12 /dev/shm
/etc/security/limits.conf
ファイルを編集し、次のエントリを追加して、メモリー・ロックの上限値を大きくします。
soft memlock 3145728hard memlock 3145728
oracle
ユーザーに切り替えます。
# sudo - oracle Password:
次のコマンドを実行して、メモリー・ロックの上限値を確認します。
$ ulimit -l 3145728
VLMのインスタンス・パラメータを構成するには、次の手順を実行します。
DB_CACHE_SIZE
およびDB_xK_CACHE_SIZE
パラメータをDB_BLOCK_BUFFERS
パラメータに置き換えます。
USE_INDIRECT_DATA_BUFFERS=TRUE
パラメータを追加します。
SGAの要件に従ってSGAを構成します。
SGA_TARGETを削除します(設定されている場合)。
データベース・インスタンスを起動します。
次のコマンドを実行して、メモリー割当てを確認します。
$ ls -l /dev/shm $ ipcs -m
次のコマンドを実行して、変数Hugepagesize
の値を表示します。
$ grep Hugepagesize /proc/meminfo
現行の共有メモリー・セグメントのhugepages
構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します。
hugepages_settings.sh
という名前のテキスト・ファイルを作成します。
次の内容をファイルに追加します。
#!/bin/bash # # hugepages_settings.sh # # Linux bash script to compute values for the # recommended HugePages/HugeTLB configuration # # Note: This script does calculation for all shared memory # segments available when the script is run, no matter it # is an Oracle RDBMS shared memory segment or not. # Check for the kernel version KERN='uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'' # Find out the HugePage size HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}` # Start from 1 pages to be on the safe side and guarantee 1 free HugePage NUM_PG=1 # Cumulative number of pages required to handle the running shared memory segments for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"` do MIN_PG='echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q' if [ $MIN_PG -gt 0 ]; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fi done # Finish with results case $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;; esac # End
次のコマンドを実行して、ファイルの権限を変更します。
$ chmod +x hugepages_settings.sh
hugepages_settings.shスクリプトを実行して、hugepages
構成の値を計算します。
$ ./hugepages_settings.sh
注意: このスクリプトを実行する前に、hugepages を使用する必要のあるすべてのアプリケーションが実行中であることを確認します。 |
次のカーネル・パラメータを設定します。
# sysctl -w vm.nr_hugepages=value_displayed_in_step_15
コンピュータの再起動時に常にこのパラメータ値が使用されるようにするには、/etc/sysctl.conf
ファイルを編集して、次のエントリを追加します。
vm.nr_hugepages=value_displayed_in_step_15
次のコマンドを実行して、使用可能なhugepages
を確認します。
$ grep Huge /proc/meminfo
インスタンスを再起動します。
次のコマンドを実行して、使用可能なhugepages
(1〜2ページの空きページ)を確認します。
$ grep Huge /proc/meminfo
注意: nr_hugepages パラメータの設定が有効でない場合は、サーバーを再起動してください。 |
Linux x86でコンピュータをVLMモードで実行する場合の制限事項は次のとおりです。
VLM構成では、複数の異なるデータベース・ブロック・サイズはサポートされません。
Oracleデータベースがインストールされたコンピュータには、4GBを超えるメモリーが必要です。
VLMを実装する前に、初期化パラメータSGA_TARGET
またはMEMORY_TARGET
の設定を解除する必要があります。