Linuxカーネル・パラメータの構成

想定されるデータベース・サイズおよびデータベースへの同時接続数に基づいて、インスタンスを実行するホストでカーネル・パラメータを構成する必要があります。

データ・インスタンスを実行するホストの場合:

管理インスタンスを実行するホストの場合:

SHMMAXおよびSHMALLパラメータの設定

TimesTen Scaleout内のデータベースは複数の要素で構成されており、各要素にはデータベース内のデータの一部が格納されています。各要素は、共有メモリー・セグメント内に存在します。Linuxでは、共有メモリー・セグメントは複数のページで構成されており、デフォルトのページ・サイズは通常4 KB (4,096バイト)です。次のコマンドを実行してデフォルトのページ・サイズを確認できます。

% getconf PAGESIZE
4096

次の共有メモリーのカーネル・パラメータを構成して、共有メモリー・セグメントのサイズを制御します。

  • shmmax: 1つの共有メモリー・セグメントの最大サイズ(バイト単位)。この値は、要素の共有メモリー・セグメントの合計サイズに対応できる十分な大きさである必要があります。

  • shmall: ページ単位で表されるシステム全体の共有メモリー・セグメントの合計サイズ。この値は、ページ・サイズ(4 KB)の倍数で表され、shmall * pagesizeは、shmmaxの値以上にする必要があります。shmallの値は、物理RAMの合計量以下に設定することをお薦めします。物理メモリーの合計量を表示するには、Linux cat /proc/meminfoコマンドを実行します。

ttShmSizeユーティリティを使用して、PermSizeTempSizeLogBufMBおよびConnections接続属性に予定または設定されている値に基づいて、共有メモリー・セグメントのサイズを決定します。これらの接続属性によって、要素のサイズが決まります。

ノート:

この例では、データベースの各要素のPermSize値は32 GB (32,768 MB)、TempSize値は4 GB (4,096 MB)、LogBufMB値は1 GB (1,024 MB)およびConnections値は2,048です。ttShmSizeユーティリティでこれらの値を使用して、要素の共有メモリー・セグメントに必要なサイズを決定します。

% ttShmSize -connstr "DSN=database1;PermSize=32768;TempSize=4096;LogBufMB=1024;Connections=2048"
The required shared memory size is 39991547720 bytes.

ノート:

  • ttShmSizeユーティリティの-connStrオプションには、システムまたはユーザーの.odbc.iniファイルに登録されているデータベース名(DSN)が必要です。ユーザーの.odbc.iniファイル内のDSNを使用できます。ttShmSizeでは、-connStrオプションでリストされない接続属性については.odbc.iniファイル内にリストされている設定が使用されるということを考慮に入れてください。ttShmSizeでは、属性が-connStrオプションと.odbc.iniファイルの両方にない場合は、デフォルトが使用されます。現在のOSユーザーの.odbc.iniファイルにデータベース名を追加するには、次の手順を実行します。

    % vi ~/.odbc.ini
    ...
    [database1]
  • 管理インスタンスを実行するホストの場合、shmmaxおよびshmallのサイズは、共有メモリー・セグメントのサイズに基づいて400 MB以上に設定します。より大きいshmmaxおよびshmallが他のアプリケーションで必要になる場合は、これらの設定を増やすことができます。

  • shmmaxおよびshmallの値は、データ・インスタンスを実行する各ホストで同じである必要があります。同様に、これらの値は管理インスタンスを実行する各ホストで同じである必要があります。

shmmaxおよびshmallのサイズを設定するには、次の手順を実行します。

  1. rootユーザーとして、/etc/sysctl.confファイルを編集し、kernel.shmmaxおよびkernel.shmallを変更します。shmmaxを39,991,547,720バイト、shmallを9,763,561ページ(shmmax/pagesize)に設定します。
    % sudo vi /etc/sysctl.conf
    ...
    kernel.shmmax=39991547720
    kernel.shmall=9763561
    
  2. 変更された/etc/sysctl.confファイルから設定を再ロードします。
    % sudo /sbin/sysctl -p
    
  3. Linux ipcs lmコマンドを実行して、現在のshmmaxおよびshmallの設定を表示します。max seg size (kbytes)shmmax値であり、max total shared memory (kbytes)は、shmallmax number of segmentsを掛けた値です。
    % ipcs -lm
     
    ------ Shared Memory Limits --------
    max number of segments = 4096
    max seg size (kbytes) = 39054246
    max total shared memory (kbytes) = 39054246
    min seg size (bytes) = 1

ノート:

shmmaxおよびshmallの設定は、それらをさらに大きくする必要があるアプリケーションが他にある場合は、大きくしてかまいません。

HugePagesの構成

メモリー管理を効率化するためにHugePagesを構成できます。管理インスタンスを実行するホストの場合、HugePagesを構成する必要はありません。構成後は、HugePagesに割り当てられたメモリーは、Linuxシステム上のRAM合計から取得され、他の用途には使用できません。また、HugePagesメモリー・セグメントは自動的にロックされ、ファイル・システムにスワップできません。

HugePagesを構成するには、次のことを把握する必要があります。

  • 要素の共有メモリー・セグメントの最大サイズ

  • LinuxシステムのHugePagesページ・サイズ

  • インスタンス管理者のグループID

SHMMAXおよびSHMALLパラメータの設定の例(ここでは、shmmax値は39,054,246 kB)、およびTimesTenユーザー・グループおよびオペレーティング・システム・ユーザーの作成の例(ここではinstanceadminユーザーのグループIDは10000)を使用します。

  • 共有メモリー・セグメントの合計サイズは39,054,246 kBです。

  • HugePagesページ・サイズは2,048 KBです。(この値はプラットフォームごとに固定され、構成できません。)

    HugePagesページ・サイズを決定するには、Linux cat /proc/meminfo|grep Hugepagesizeコマンドを実行します。

    % cat /proc/meminfo | grep Hugepagesize
    Hugepagesize:       2048 kB
  • グループIDは10,000です。

    インスタンス管理者のグループIDを決定するには、instanceadminユーザーとして、次を実行します。

    % id
    uid=55000(instanceadmin) gid=10000(g10000)groups=10000(g10000)

HugePagesを構成するには、次を実行します。

  1. 共有メモリー・セグメントの合計サイズ(MBで表される)をHugepagesizeの値(MBで表される)で除算して、HugePages数を決定します。この例では、データベース要素の共有メモリー・セグメントの合計は39,054,246 kB (~38,138MB)であり、Hugepagesize値は2,048 kB (2MB)です。
    38138 MB/ 2 MB = 19069 
  2. rootユーザーとして、/etc/sysctl.confファイルを編集し、vm.nr_hugepagesHugePagesの数に設定し、vm.hugetlb_shm_groupをインスタンス管理者のグループIDに設定します。後者の設定により、HugePagesへのアクセスがグループのメンバーに制限されます。
    % sudo vi /etc/sysctl.conf
    ...
    vm.nr_hugepages=19069
    vm.hugetlb_shm_group=10000
  3. 変更された/etc/sysctl.confファイルから設定を再ロードします。
    % sudo /sbin/sysctl -p
  4. HugePagesが正しく構成されていることを確認するには、次を実行します。
    % cat /proc/meminfo | grep HugePages
    HugePages_Total:   19069
    HugePages_Free:    19069
    ...

ノート:

  • データ・インスタンスを実行するホストの場合、これらのホストのHugePagesは同じである必要があります。

  • HugePagesは連続した使用可能メモリー領域への割当てが必要なため、システムを再起動するまでは、要求された割当てが設定されないか、部分的にのみ設定される場合があります。/proc/meminfoからHugePages_TotalおよびHugePages_Freeの値を確認します。再起動するときには、システムで十分なメモリーを使用できると想定し、すべて割り当てられます。

  • TimesTen PL/SQL共有メモリー・セグメントは、構成されているHugePages割当ての一部を使用します(PLSQL_MEMORY_SIZE接続属性の値によって決定されます)。『Oracle TimesTen In-Memory Databaseリファレンス』PLSQL_MEMORY_SIZEを参照してください。

  • Linuxでは、HugePagesセグメントは自動的にロックされ、メモリー・セグメントはファイル・システム・スワップの対象になりません。したがって、HugePagesを構成する場合は、MemoryLock接続属性を設定する必要はありません。

MEMLOCKパラメータの設定

/etc/security/limits.confファイルのmemlockエントリは、ユーザーがロックできるメモリー量を制御します。これらのエントリはシステム・レベルで設定され、MemoryLock接続属性の設定とは異なります。管理インスタンスを実行するホストの場合、memlockパラメータの設定はオプションです。データ・インスタンスを実行するホストの場合、hard memlockおよびsoft memlockのエントリ(KBで表される)を、各要素の共有メモリー・セグメントのサイズに設定します。HugePagesが構成されている場合、memlock値は、共有メモリー・セグメントのサイズに対応できるように大きくする必要があります。そうしないと、要素がメモリーにロードされません

たとえば、instanceadminユーザーについては、共有メモリー・セグメントの合計サイズが39,054,246 kBだとすると、memlockエントリを39054246に設定します。

  1. rootユーザーとして、/etc/security/limits.confファイルを編集し、instanceadminユーザーに対してmemlockエントリを39,054,246 kBに設定します。この値は、instanceadminユーザーがロックできるメモリーの合計量を示します。
    % sudo vi /etc/security/limits.conf
    ...
    instanceadmin soft   memlock 39054246
    instanceadmin hard   memlock 39054246
  2. 変更を反映するには、instanceadminユーザーとして、ログアウトして再度ログインします。

ノート:

データ・インスタンスを実行するホストの場合、これらのホストのmemlock設定は同じにする必要があります。同様に、管理インスタンスを実行するホスト間では、それらのmemlock設定を同じにする必要があります。

SEMMSLおよびSEMMNSパラメータの設定

TimesTenでは、データベースへの最大接続数に上限があります。データベース接続は次のもので構成されます。

  • ユーザー接続: ユーザー・アプリケーションによって確立されます

  • システム接続: TimesTenによって内部的に確立されます(接続数を48に設定)

  • その他の必要な接続(接続数を107に設定)

ユーザー接続数は、ローカルのグリッド要素へのユーザー接続だけでなく、グリッドのすべての要素にわたるすべてのユーザー接続の合計です。たとえば、グリッドで2,048個の同時アプリケーションがサポートされている場合は、データ・インスタンスを実行する各ホストを、2,048個の接続(およびシステム接続)をサポートするように構成する必要があります。

各ユーザー接続およびシステム接続(データベース接続)には1つのセマフォが割り当てられ、データベースのセマフォ合計は次のようになります。

Total semaphores = user connections (N) + system connections (48) + other required connections (107)
Total semaphores = N + 155

セマフォ設定は、/etc/sysctl.confkernel.sem構成ディレクティブにあります。

kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI

説明:

  • SEMMSLは、配列ごとのセマフォの最大数です。この値は、最大接続数に関連します。この値を155とユーザー接続数の合計に構成します。

  • SEMMNSは、システム全体のセマフォの最大数です。ガイドラインとして、SEMMNS = (SEMMNI * SEMMSL)という式を使用します。

  • SEMOPMは、semopコールごとの最大処理数です。

  • SEMMNIは、配列の最大数です。

次のステップに従って、SEMMSLおよびSEMMNSの設定を構成します(ユーザーは必ずrootにしてください)。

  1. 既存のカーネル・パラメータ設定を表示します。
    % /sbin/sysctl -a | grep kernel.sem
    kernel.sem = 250 32000 100 128
  2. /etc/sysctl.confファイルを編集し、SEMMSL (kernel.sem内の最初の値)を155と同時ユーザー接続数の合計に変更します。

    管理インスタンスを実行するホストの場合、接続数は400です。データ・インスタンスを実行するホストの場合、接続数は固定されていません。

    この例では、最大で2,048個の接続をサポートするために、SEMMSL値を2,203に設定します。式SEMMNS = (SEMMNI * SEMMSL)に基づいて、SEMMNS281984に変更します。

    % sudo vi /etc/sysctl.conf
    ...
    kernel.sem = 2203 281984 100 128
  3. 変更された/etc/sysctl.confファイルから設定を再ロードします。
    % sudo /sbin/sysctl -p

ノート:

データ・インスタンスを実行するホストの場合、これらのホストのセマフォ値は同じである必要があります。同様に、管理インスタンスを実行するホストの場合、これらのホストのセマフォ値は同じである必要があります。

SHMMNIパラメータの設定

SHMMNI値により、ホストで同時に作成できる共有メモリーセグメントの数を制御します。TimesTenでは、TimesTenデータベース用に1つの共有メモリー・セグメントと、PL/SQL用に1つの共有メモリー・セグメントが作成されます。また、各クライアント/サーバー接続の間に割り当てられる、小さい共有メモリー・セグメントもあります。

データ・インスタンスを実行するホストで、データベースへの予想される同時クライアント/サーバー接続数を考慮に入れてSHMMNIパラメータを構成する必要があります。SHMMNIを、予想されるクライアント/サーバー接続の数より大きい値に設定します。(必ずTimesTen共有メモリー・セグメント、PL/SQL共有メモリー・セグメント、および共有メモリーを使用するその他のプログラムも考慮に入れてください。)TimesTenにはクライアント/サーバー接続数に含まれないシステム接続があるため、たとえば、8,000個の同時クライアント/サーバー接続が予想される場合は、9000以上の値が適切です。

次のステップに従って、SHMMNI設定を構成します。

  1. 既存のSHMMNIパラメータ設定を表示します。
    % /sbin/sysctl -a | grep shmmni
    kernel.shmmni = 4096
  2. /etc/sysctl.confファイルを編集し、kernel.shmmniをクライアント/サーバー接続の数より大きい値に変更します。この例では、kernel.shmmni9000に設定します。
    % sudo vi /etc/sysctl.conf
    ...
    kernel.shmmni = 9000
    
  3. 変更した/etc/sysctl.confファイル内の設定を再ロードします。
    % sudo /sbin/sysctl -p

ノート:

データ・インスタンスを実行するホスト間では、それらのshmmniパラメータ設定を同じにする必要があります。