B LinuxシステムでのOracle Databaseの管理
この付録では、LinuxシステムでOracle Databaseを管理する方法について説明します。
次の項目が含まれます。
注意:
Oracle Database 11gリリース2 (11.2)からは、Linux x86-64およびIBM: Linux on System zメディアにはLinux x86バイナリは含まれません。
B.1 非同期入出力のサポート
注意:
Linuxの自動ストレージ管理では、デフォルトで非同期入出力が使用されます。非同期入出力は、ネットワーク・ファイル・システムに格納されたデータベース・ファイルに対してはサポートされません。
Oracle Databaseでは、カーネルの非同期入出力がサポートされます。デフォルトでは、非同期入出力はRAWボリュームで使用可能です。デフォルトでは自動ストレージ管理で非同期入出力が使用されます。
デフォルトでは、パラメータ・ファイルのDISK_ASYNCH_IO
初期化パラメータはTRUEに設定されています。ファイル・システムのファイルに対して非同期入出力を有効にするには、次の手順を実行します。
B.2 非同期入出力サポート
注意:
Linuxの自動ストレージ管理では、デフォルトで非同期入出力が使用されます。非同期入出力は、ネットワーク・ファイル・システムに格納されたデータベース・ファイルに対してはサポートされません。
Oracle Databaseでは、カーネルの非同期入出力がサポートされます。この機能はデフォルトで無効です。
デフォルトでは、RAWデバイス上で非同期I/Oを有効化するため、パラメータ・ファイルのDISK_ASYNCH_IO
初期化パラメータはTRUEに設定されています。ファイル・システムのファイルに対して非同期入出力を有効にするには、次の手順を実行します。
- すべてのOracle Databaseファイルが、非同期入出力をサポートしているファイル・システム上にあることを確認します。
- パラメータ・ファイル内の
FILESYSTEMIO_OPTIONS
初期化パラメータをASYNCH
に設定すると、非同期入出力が有効になります。非同期入出力と直接入出力の両方を有効にする場合は、パラメータ・ファイル内のFILESYSTEMIO_OPTIONS
初期化パラメータをSETALL
に設定します。
B.3 直接入出力サポートの有効化
直接入出力サポートは使用可能であり、Linuxでサポートされます。
直接入出力サポートを有効にする手順
-
FILESYSTEMIO_OPTIONS
初期化パラメータをDIRECTIO
に設定します。 -
パラメータ・ファイルの
FILESYSTEMIO_OPTIONS
初期化パラメータをSETALL
に設定することにより、非同期入出力および直接入出力の両方を有効にできます。
B.4 同時マルチスレッドの有効化
同時マルチスレッドが有効になっている場合、v$osstat
ビューは、オンライン論理(NUM_LCPUS
)および仮想CPU(NUM_VCPUS
)に対応した2つの行を追加して報告します。
B.5 共有リソースの割当て
MEMORY_TARGET
またはMEMORY_MAX_TARGET
機能を使用するには、次のカーネル・パラメータを変更する必要があります。
-
/dev/shm
マウント・ポイントは、SGA_MAX_SIZE
の値が設定されていれば、その値以上にするか、MEMORY_TARGET
とMEMORY_MAX_TARGET
のうちいずれか大きいほうの値以上に設定する必要があります。たとえば、MEMORY_MAX_TARGET=4GB
のみが設定されている場合、4GBのシステムを/dev/shm
マウント・ポイントに作成するには、次の手順を実行します。-
root
ユーザーで次のコマンドを実行します。# mount -t tmpfs shmfs -o size=4g /dev/shm
-
システムの再起動時にインメモリー・ファイル・システムが確実にマウントされるように、
/etc/fstab
ファイルに次のようなエントリを追加します。tmpfs /dev/shm tmpfs size=4g 0
-
-
各Oracleインスタンスのファイル記述子の数は、512*
PROCESSES
だけ増加します。したがって、ファイル記述子の最大数は、少なくともこの値以上にし、オペレーティング・システムの要件に応じてさらに数を足す必要があります。たとえば、cat /proc/sys/fs/file-max
コマンドで32768が返され、PROCESSES
が100である場合、Oracleに対して51200使用可能にするには、root
としてこの値を6815744以上に設定します。次のどちらかのオプションを使用して、file-max
記述子の値を設定します。-
次のコマンドを実行します。
echo 6815744 > /proc/sys/fs/file-max
または
-
/etc/sysctl.conf
ファイル内で次のエントリを変更し、root
としてシステムを再起動します。fs.file-max = 6815744
-
-
プロセスごとのファイル記述子の数は、512以上である必要がありますたとえば、
root
として次のコマンドを実行します。-
bashおよびshの場合
# ulimit -n
-
cshの場合
# limit descriptors
前のコマンドで200が返される場合、次のコマンドを実行して、プロセッサごとのファイル記述子の上限の値(たとえば、1000)を設定します。
-
bashおよびshの場合
# sudo sh # ulimit -n 1000
-
cshの場合
# sudo sh # limit descriptors 1000
-
-
LOCK_SGA
が有効になっている場合、MEMORY_TARGET
およびMEMORY_MAX_TARGET
は使用できません。MEMORY_TARGET
およびMEMORY_MAX_TARGET
は、LinuxのHugeページと使用することもできません。
B.6 Linuxシステムでのcgroup作成の概要
制御グループ(cgroup)は、一連の専用CPUをデータベース・インスタンスに関連付けることによってデータベースのパフォーマンスを向上させます。各データベース・インスタンスはそのcgroupのリソースのみを使用します。
大規模サーバーで統合を行う場合、CPUとメモリーの特定のサブセットにデータベースを制限することをお薦めします。この機能により、Oracle DatabaseインスタンスのCPUとメモリーの制約を簡単に有効にすることができます。
setup_processor_group.sh
スクリプトを使用してcgroupsを作成します。このスクリプトは、My Oracle Support WebサイトのNote 1585184.1からダウンロードします。
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1585184.1
B.7 HugePagesの概要
HugePagesは、Linuxカーネル2.6に統合された機能です。HugePagesを有効にすると、オペレーティング・システムはデフォルト(通常、4KB)より大きいメモリー・ページをサポートできます。大規模なページ・サイズを使用すると、ページ表エントリへのアクセスに必要なシステム・リソースの量を削減することにより、システム・パフォーマンスを向上させることができます。32ビットおよび64ビット構成の両方で使用できます。HugePagesのサイズは、カーネル・バージョンとハードウェア・アーキテクチャに応じて、2MBから256MBになります。Oracle Databaseの場合、HugePagesを使用すると、ページ状態のオペレーティング・システム・メンテナンスが軽減され、Translation Lookaside Buffer(TLB)ヒット率が向上します。
注意:
現時点で、透過的なHugepagesは、手動によるHugePagesの構成の代替手段になりません。
この項には次のトピックが含まれます:
B.7.1 HugePagesのメモリー割当ての確認
使用するオペレーティング・システムでHugePagesを有効にしている場合は、この情報を確認してください。
Linuxプラットフォームのインストールでは、Oracle Databaseの最高のパフォーマンスを得るためにHugePagesを使用することをお薦めします。HugePagesが有効になっているサーバー上のOracle Grid InfrastructureおよびOracle Databaseをアップグレードする場合、HugePagesのメモリー割当て要件を確認することをお薦めします。
GIMRとHugePagesメモリー
Oracle Grid Infrastructureインストールには、グリッド・インフラストラクチャ管理リポジトリ(GIMR)が含まれます。HugePagesがクラスタ・メンバー・ノードで構成されている場合、GIMRのシステム・グローバル領域(SGA)は、HugePagesメモリーにインストールされます。GIMRのSGAは、HugePagesメモリーを最大1GBまで占有します。Oracle Grid Infrastructureは、クラスタにインストールされたOracle Databaseより前に起動します。
クラスタ・メンバー・ノードのオペレーティング・システムのHugePagesに対するメモリー割当てが、クラスタのすべてのOracle Databaseインスタンスに対応するSGAのサイズにとって不十分な場合、1つ以上のOracle Database SGAがHugePagesではなく通常のページにマップされ、期待するパフォーマンスに到達しないことがあります。この問題を回避するには、アップグレードを計画するときに、HugePages用に予約するメモリーが、メモリー要件に対応するのに十分な大きさであることを確認してください。
クラスタ上でSGAを実行する予定のすべてのデータベースに対して十分な大きさのメモリーをHugePagesに割り当て、HugePagesグリッド・インフラストラクチャ管理リポジトリのSGAに対応します。
B.7.2 LinuxでのHugePagesの使用
Linuxにおいて、Oracle Databaseでラージ・ページ(HugePagesとも呼ばれる)を使用可能にするには、vm.nr_hugepages
カーネル・パラメータの値を設定し、予約するラージ・ページ数を指定します。データベース・インスタンスのSGA全体を保持するために十分なラージ・ページを指定する必要があります。必要なパラメータ値を判断するには、インスタンスのSGAサイズをラージ・ページのサイズで除算してから、結果の端数を切り上げて最も近い整数にします。
デフォルトのラージ・ページ・サイズを判断するには、次のコマンドを実行します。
# grep Hugepagesize /proc/meminfo
たとえば、/proc/meminfo
にラージ・ページのサイズが2MBとリストされ、インスタンスの総SGAサイズが1.6GBの場合は、vm.nr_hugepages
カーネル・パラメータの値を820(1.6GB / 2MB = 819.2)に設定します。
B.7.3 HugePagesによるSGAのチューニング
HugePagesを使用しない場合、オペレーティング・システムではページごとに4KBのメモリーが保持されます。オペレーティング・システムによってページがデータベースのシステム・グローバル領域(SGA)に割り当てられると、オペレーティング・システム・カーネルはSGAに割り当てられた4KBページのそれぞれについて継続的に、ページ表にページ・ライフサイクルを反映する必要があります(ダーティ、空き、プロセスにマッピング済など)。
HugePagesを使用した場合、各ページ表のエントリは2MBから256MBのページを指しているため、オペレーティング・システムのページ表(仮想メモリーから物理メモリーへのマッピング)は小さくなります。
また、カーネルによるライフサイクル監視が必要なページの数が少なくなります。たとえば、64-bitのハードウェアでHugePagesを使用する場合、256MBのメモリーをマップするには、1ページの表エントリ(PTE)が必要です。HugePagesを使用しないで256MBのメモリーをマップするには、256MB×1024KB/4KB=65536PTEが必要です。
HugePagesには次の利点があります。
-
TLBヒットが増加することによってパフォーマンスが向上します。
-
ページはメモリー内でロックされ、スワップ・アウトが発生しないので、SGAなどの共有メモリー構造のRAMとして使用できます。
-
連続するページを事前に割り当てるため、System V共有メモリー(SGAなど)以外に使用できなくなります。
-
ページ・サイズが大きいので、仮想メモリーのうち該当する部分についてカーネルが行う記録作業が少なくなります。
B.7.4 LinuxでのHugePagesの構成
コンピュータにHugePagesを構成するには、次のステップを実行します。
-
次のコマンドを実行してカーネルでHugePagesがサポートされているかどうかを確認します。
$ grep Huge /proc/meminfo
-
Linuxシステムによっては、HugePagesがデフォルトでサポートされていません。このようなシステムの場合、
CONFIG_HUGETLBFS
およびCONFIG_HUGETLB_PAGE
構成オプションを使用してLinuxカーネルを構築します。CONFIG_HUGETLBFS
は「File Systems」の下にあり、CONFIG_HUGETLB_PAGE
はCONFIG_HUGETLBFS
を選択すると選択されます。 -
/etc/security/limits.conf
ファイルのmemlock
設定を編集します。memlock
設定はKB単位で指定し、ロックされるメモリーの上限値を、HugePagesメモリーが有効の場合は現行RAMの90パーセント以上に設定し、HugePagesメモリーが無効の場合は3145728KB (3GB)以上に設定する必要があります。たとえば、64GBのRAMが搭載されている場合は、次のエントリを追加してメモリー内にロックされるアドレス空間の上限値を大きくします。* soft memlock 60397977 * hard memlock 60397977
memlock
の値をSGA要件よりも大きく設定することもできます。 -
oracle
ユーザーとして再度ログインし、ulimit -l
コマンドを実行して新しいmemlock
設定を確認します。$ ulimit -l 60397977
-
次のコマンドを実行して、変数
Hugepagesize
の値を表示します。$ grep Hugepagesize /proc/meminfo
-
現行の共有メモリー・セグメントの
hugepages
構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します。-
hugepages_settings.sh
という名前のテキスト・ファイルを作成します。hugepages_settings.sh
スクリプトの作成の詳細は、My Oracle Supportノート401749.1を参照してください。 -
次のコマンドを実行して、ファイルの権限を変更します。
$ chmod +x hugepages_settings.sh
-
-
hugepages_settings.sh
スクリプトを実行して、hugepages
構成の値を計算します。$ ./hugepages_settings.sh
注意:
このスクリプトを実行する前に、hugepages
を使用するすべてのアプリケーションが実行中であることを確認します。 -
次のカーネル・パラメータを設定します。valueは、ステップ7で決定したHugePages値です。
# sysctl -w vm.nr_hugepages=value
-
HugePagesがシステム再起動後に確実に割り当てられるようにするために、次のエントリを
/etc/sysctl.conf
ファイルに追加します。valueは、ステップ7で決定したHugePages値です。vm.nr_hugepages=value
-
次のコマンドを実行して、使用可能な
hugepages
を確認します。$ grep Huge /proc/meminfo
-
インスタンスを再起動します。
-
次のコマンドを実行して、使用可能な
hugepages
(1から2ページの空きページ)を確認します。$ grep Huge /proc/meminfo
注意:
nr_hugepages
を使用してHugePages割当てを設定できない場合は、空きメモリーが断片化している可能性があります。サーバーを再起動するとHugepages割当てが有効になります。
B.7.5 HugePages構成の制限
HugePagesには次の制限があります。
-
初期化パラメータ
MEMORY_TARGET
およびMEMORY_MAX_TARGET
の両方の設定を解除する必要があります。たとえば、データベース・インスタンスのパラメータの設定を解除するには、コマンドALTER SYSTEM RESET
を使用します。 -
自動メモリー管理(AMM)とHugePagesは、互換性がありません。AMMを使用すると、SGAメモリー全体は
/dev/shm
の下にファイルを作成することによって割り当てられます。Oracle DatabaseがAMMを使用してSGAを割り当てると、HugePagesは予約されません。Oracle Database 18cでHugePagesを使用するには、AMMを無効にする必要があります。 -
VLMを32ビット環境で使用する場合、データベース・バッファ・キャッシュにHugePagesを使用することはできません。HugePagesは、
shared_pool
、large_pool
など、他の部分のSGAに使用できます。VLM(バッファ・キャッシュ)のためのメモリー割当ては、共有メモリー・ファイルシステム(ramfs/tmpfs/shmfs
)を使用して実行されます。メモリー・ファイルシステムでは、HugePagesは予約または使用されません。 -
システムの起動後に、HugePagesを割当てまたは解放することはできません。ただし、システム管理者が、使用可能なページ数を変更するか、またはプール・サイズを変更することによって、HugePages構成を変更した場合は例外です。システムの起動時に必要な領域がメモリー内に確保されなかった場合、HugePagesの割当てに失敗します。
-
アプリケーションによって余分なHugePagesが使用されない場合にシステムでメモリーが不足することがあるため、HugePagesが適切に構成されていることを確認します。
-
インスタンスの起動時に十分なHugePagesがなく、初期化パラメータ
use_large_pages
がonly
に設定されている場合、データベースは起動できず、アラート・ログ・メッセージにHugepagesに関して必要な情報が表示されます。
B.7.6 透過的なHugePagesの無効化
インストールを開始する前に、透過的なHugePagesを無効にすることをお薦めします。
透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepaged
スレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。
注意:
透過的なHugePagesがUEK2カーネルおよびそれ以降のUEKカーネルで無効になっていても、Linuxシステムでは透過的なHugePagesをデフォルトで有効にすることができます。Red Hat Enterprise Linux 6、Red Hat Enterprise Linux 7、SUSE 11、Oracle Linux 6および以前のリリースのOracle Linux用のUnbreakable Enterprise Kernel 2 (UEK2)カーネルに付属するOracle Linux 7では、透過的なHugePagesメモリーがデフォルトで有効になっています。
透過的なHugePagesを使用すると、実行中にメモリー割当ての遅延が生じます。パフォーマンスの問題を回避するために、透過的なHugePagesはすべてのOracle Databaseサーバーで無効にすることをお薦めします。かわりに標準のHugePagesを使用すると、パフォーマンスが向上します。
透過的なHugePagesが有効かどうかを確認するには、rootユーザーとして次のコマンドのいずれかを実行します。
Red Hat Enterprise Linuxカーネルの場合:
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
その他のカーネルの場合:
# cat /sys/kernel/mm/transparent_hugepage/enabled
次に示すのは、[always]フラグを有効にして透過的なHugePagesを使用している場合を示す出力例です。
[always] never
注意:
透過的なHugePagesをカーネルから削除した場合、/sys/kernel/mm/transparent_hugepage
と/sys/kernel/mm/redhat_transparent_hugepage
のどちらのファイルも存在しません。
透過的なHugePagesを無効にするには、次の手順を実行します。
-
Oracle Linux 6以前のリリースでは、
/etc/grub.conf
ファイルで、カーネル・ブートの行に次のエントリを追加します。transparent_hugepage=never
次に例を示します。title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
Oracle Linux 7以上では、ファイル名はオペレーティング・システムにより異なります。使用するオペレーティング・システムのドキュメントで正確なファイル名および透過的なHugePagesを無効化するステップを確認します。
例えば、Oracle Linux 7.3では、透過的HugePagesを無効化する手順には
/etc/default/grub
ファイルの編集およびコマンドgrub2-mkconfig
の実行が含まれます。 -
システムを再起動して変更を確定します。