日本語PDF

A LinuxシステムでのOracle Databaseの管理

この付録では、LinuxシステムでOracle Databaseを管理する方法について説明します。

次の項目が含まれます。

ノート:

Oracle Database 11gリリース2 (11.2)からは、Linux x86-64およびIBM: Linux on System zメディアにはLinux x86バイナリは含まれません。

A.1 非同期入出力のサポート

ノート:

Linuxの自動ストレージ管理では、デフォルトで非同期入出力が使用されます。非同期入出力は、ネットワーク・ファイル・システムに格納されたデータベース・ファイルに対してはサポートされません。

Oracle Databaseでは、カーネルの非同期入出力がサポートされます。デフォルトでは、非同期入出力はRAWボリュームで使用可能です。デフォルトでは自動ストレージ管理で非同期入出力が使用されます。

デフォルトでは、パラメータ・ファイルのDISK_ASYNCH_IO初期化パラメータはTRUEに設定されています。ファイル・システムのファイルに対して非同期入出力を有効にするには:

  1. すべてのOracle Databaseファイルが、非同期入出力をサポートしているファイル・システム上にあることを確認します。
  2. パラメータ・ファイルのFILESYSTEMIO_OPTIONS初期化パラメータをASYNCHまたはSETALLに設定します。

    ノート:

    ファイル・システムのファイルがODMライブラリ・インタフェースまたはDirect NFSクライアントで管理されている場合、デフォルトで、非同期入出力が有効になります。これらの環境では、非同期入出力を有効にするために、FILESYSTEMIO_OPTIONSを設定する必要はありません。

A.2 非同期入出力サポート

ノート:

Linuxの自動ストレージ管理では、デフォルトで非同期入出力が使用されます。非同期入出力は、ネットワーク・ファイル・システムに格納されたデータベース・ファイルに対してはサポートされません。

Oracle Databaseでは、カーネルの非同期入出力がサポートされます。この機能はデフォルトで無効です。

デフォルトでは、RAWデバイス上で非同期I/Oを有効化するため、パラメータ・ファイルのDISK_ASYNCH_IO初期化パラメータはTRUEに設定されています。ファイル・システムのファイルに対して非同期入出力を有効にするには:

  1. すべてのOracle Databaseファイルが、非同期入出力をサポートしているファイル・システム上にあることを確認します。
  2. パラメータ・ファイル内のFILESYSTEMIO_OPTIONS初期化パラメータをASYNCHに設定すると、非同期入出力が有効になります。非同期入出力と直接入出力の両方を有効にする場合は、パラメータ・ファイル内のFILESYSTEMIO_OPTIONS初期化パラメータをSETALLに設定します。

A.3 直接入出力サポートの有効化

直接入出力サポートは使用可能であり、Linuxでサポートされます。

直接入出力サポートを有効にするには:

  • FILESYSTEMIO_OPTIONS初期化パラメータをDIRECTIOに設定します。

  • パラメータ・ファイルのFILESYSTEMIO_OPTIONS初期化パラメータをSETALLに設定することにより、非同期入出力および直接入出力の両方を有効にできます。

A.4 マルチスレッド同時処理の有効化

同時マルチスレッドが有効になっている場合、v$osstatビューは、オンライン論理(NUM_LCPUS)および仮想CPU(NUM_VCPUS)に対応した2つの行を追加して報告します。

A.5 共有リソースの割当て

MEMORY_TARGETまたはMEMORY_MAX_TARGET機能を使用するには、次のカーネル・パラメータを変更する必要があります。

  • /dev/shmマウント・ポイントは、SGA_MAX_SIZEの値が設定されていれば、その値以上にするか、MEMORY_TARGETMEMORY_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ページと使用することもできません。

A.6 Linuxシステムでのcgroup作成について

制御グループ(cgroup)は、一連の専用CPUをデータベース・インスタンスに関連付けることによってデータベースのパフォーマンスを向上させます。各データベース・インスタンスはそのcgroupのリソースのみを使用します。

大規模サーバーで統合を行う場合、CPUとメモリーの特定のサブセットにデータベースを制限することをお薦めします。この機能により、Oracle DatabaseインスタンスのCPUとメモリーの制約を簡単に有効にすることができます。

setup_processor_group.shスクリプトを使用してcgroupsを作成します。このスクリプトは、My Oracle Support Webサイトのノート1585184.1からダウンロードします。

https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1585184.1

A.7 HugePagesの概要

HugePagesは、Linuxカーネル2.6に統合された機能です。HugePagesを有効にすると、オペレーティング・システムはデフォルト(通常、4KB)より大きいメモリー・ページをサポートできます。大規模なページ・サイズを使用すると、ページ表エントリへのアクセスに必要なシステム・リソースの量を削減することにより、システム・パフォーマンスを向上させることができます。32ビットおよび64ビット構成の両方で使用できます。HugePagesのサイズは、カーネル・バージョンとハードウェア・アーキテクチャに応じて、2MBから256MBになります。Oracle Databaseの場合、HugePagesを使用すると、ページ状態のオペレーティング・システム・メンテナンスが軽減され、Translation Lookaside Buffer(TLB)ヒット率が向上します。

ノート:

現時点で、透過的なHugepagesは、手動によるHugePagesの構成の代替手段になりません。

この項には次のトピックが含まれます:

A.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に対応します。

A.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)に設定します。

A.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など)以外に使用できなくなります。

  • ページ・サイズが大きいので、仮想メモリーのうち該当する部分についてカーネルが行う記録作業が少なくなります。

A.7.4 LinuxでのHugePagesの構成

コンピュータにHugePagesを構成するには、次のステップを実行します。

  1. 次のコマンドを実行してカーネルでHugePagesがサポートされているかどうかを確認します。

    $ grep Huge /proc/meminfo
    
  2. Linuxシステムによっては、HugePagesがデフォルトでサポートされていません。このようなシステムの場合、CONFIG_HUGETLBFSおよびCONFIG_HUGETLB_PAGE構成オプションを使用してLinuxカーネルを構築します。CONFIG_HUGETLBFSは「File Systems」の下にあり、CONFIG_HUGETLB_PAGECONFIG_HUGETLBFSを選択すると選択されます。

  3. /etc/security/limits.confファイルのmemlock設定を編集します。memlock設定はKB単位で指定し、ロックされるメモリーの上限値を、HugePagesメモリーが有効の場合は現行RAMの90パーセント以上に設定し、HugePagesメモリーが無効の場合は3145728KB (3GB)以上に設定する必要があります。たとえば、64GBのRAMが搭載されている場合は、次のエントリを追加してメモリー内にロックされるアドレス空間の上限値を大きくします。

    *   soft   memlock    60397977
    *   hard   memlock    60397977
    

    memlockの値をSGA要件よりも大きく設定することもできます。

  4. oracleユーザーとして再度ログインし、ulimit -lコマンドを実行して新しいmemlock設定を確認します。

    $ ulimit -l
    60397977
    
  5. 次のコマンドを実行して、変数Hugepagesizeの値を表示します。

    $ grep Hugepagesize /proc/meminfo
    
  6. 現行の共有メモリー・セグメントのhugepages構成の推奨値を計算するスクリプトを作成するには、次の手順を実行します。

    1. hugepages_settings.shという名前のテキスト・ファイルを作成します。

      hugepages_settings.shスクリプトの作成の詳細は、My Oracle Supportノート401749.1を参照してください。

    2. 次のコマンドを実行して、ファイルの権限を変更します。

      $ chmod +x hugepages_settings.sh
      
  7. hugepages_settings.shスクリプトを実行して、hugepages構成の値を計算します。

    $ ./hugepages_settings.sh
    

    ノート:

    このスクリプトを実行する前に、hugepagesを使用するすべてのアプリケーションが実行中であることを確認します。
  8. 次のカーネル・パラメータを設定します。valueは、ステップ7で決定したHugePages値です。

    # sysctl -w vm.nr_hugepages=value
    
  9. HugePagesがシステム再起動後に確実に割り当てられるようにするために、次のエントリを/etc/sysctl.confファイルに追加します。valueは、ステップ7で決定したHugePages値です。

    vm.nr_hugepages=value
    
  10. 次のコマンドを実行して、使用可能なhugepagesを確認します。

    $ grep Huge /proc/meminfo
    
  11. インスタンスを再起動します。

  12. 次のコマンドを実行して、使用可能なhugepages(1から2ページの空きページ)を確認します。

    $ grep Huge /proc/meminfo

    ノート:

    nr_hugepagesを使用してHugePages割当てを設定できない場合は、空きメモリーが断片化している可能性があります。サーバーを再起動するとHugepages割当てが有効になります。

A.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 19cでHugePagesを使用するには、AMMを無効にする必要があります。

  • VLMを32ビット環境で使用する場合、データベース・バッファ・キャッシュにHugePagesを使用することはできません。HugePagesは、shared_poollarge_poolなど、他の部分のSGAに使用できます。VLM(バッファ・キャッシュ)のためのメモリー割当ては、共有メモリー・ファイル・システム(ramfs/tmpfs/shmfs)を使用して実行されます。メモリー・ファイル・システムでは、HugePagesは予約または使用されません。

  • システムの起動後に、HugePagesを割当てまたは解放することはできません。ただし、システム管理者が、使用可能なページ数を変更するか、またはプール・サイズを変更することによって、HugePages構成を変更した場合は例外です。システムの起動時に必要な領域がメモリー内に確保されなかった場合、HugePagesの割当てに失敗します。

  • アプリケーションによって余分なHugePagesが使用されない場合にシステムでメモリーが不足することがあるため、HugePagesが適切に構成されていることを確認します。

  • インスタンスの起動時に十分なHugePagesがなく、初期化パラメータuse_large_pagesonlyに設定されている場合、データベースは起動できず、アラート・ログ・メッセージにHugepagesに関して必要な情報が表示されます。

A.7.6 透過的なHugePagesの無効化

インストールを開始する前に、透過的なHugePagesを無効にすることをお薦めします。

透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepagedスレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。

ノート:

透過的なHugePagesがUEK2カーネルおよびそれ以降のUEKカーネルで無効になっていても、Linuxシステムでは透過的なHugePagesをデフォルトで有効にすることができます。

透過的なHugePagesメモリーは、Oracle Linux 6以降、Red Hat Enterprise Linux 6以降、SUSE 11以降のカーネルでデフォルトで有効になります。

透過的な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を無効にするには:

  1. Oracle Linux 7以降およびRed Hat Enterprise Linux 7以降の場合は、/etc/default/grubファイル内でtransparent_hugepage=neverパラメータを追加または変更します。

    transparent_hugepage=never
    たとえば:
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off transparent_hugepage=never"
    GRUB_DISABLE_RECOVERY="true"

    ノート:

    このファイル名は、オペレーティング・システムによって異なる場合があります。使用するオペレーティング・システムのドキュメントで正確なファイル名および透過的なHugePagesを無効化するステップを確認します。
  2. grub2–mkconfig コマンドを実行してgrub.cfgファイルを再生成します。

    # grub2-mkconfig -o /boot/grub2/grub.cfg
  3. システムを再起動して変更を確定します。