自動systemd管理を使用するTimesTenインスタンスの作成

次の項の手順を実行して、自動systemd管理を使用するインスタンスを作成します。

systemdのTimesTenインスタンスの構成

systemdを使用してTimesTenインスタンスを作成するには、次のステップを実行します。

  1. installation_dir/tt22.1.1.29.0/bin/ttInstanceCreateユーティリティを実行してTimesTenインスタンスを作成します。この例では、ttInstanceCreateを対話形式で実行します。Oracle Clusterwareにyesを入力しないでください。TimesTenがOracle Clusterwareによって管理されている場合、systemdは使用できません。
    次の点に注意してください:
    • 次の質問にyesと入力します: Would you like to use systemd to manage TimesTen?
    • /scratch/ttuser/myinstance/startup/ TimesTenサービス・ファイルの名前(この例ではtt_myinstance.service)を確認します。後で、TimesTenがこのファイルを適切なsystemdの場所(/lib/systemd/system)にコピーできるように、/scratch/ttuser/myinstance/bin/setuproot -install -systemdスクリプトを実行します。これにより、systemdはTimesTenデーモンを自動的に管理できます。
    % installation_dir/tt22.1.1.29.0/bin/ttInstanceCreate
    
    NOTE: Each TimesTen instance is identified by a unique name.
          The instance name must be a non-null alphanumeric string, not longer
          than 255 characters.
    
    Please choose an instance name for this installation? [ tt221 ] myinstance
    Instance name will be 'myinstance'.
    Is this correct? [ yes ]
    Where would you like to install the myinstance instance of TimesTen? [ /home/ttuser ] /scratch/ttuser
    Creating instance in /scratch/ttuser ...
    
    NOTE: If you are configuring TimesTen for use with Oracle Clusterware, the
          daemon port number must be the same across all TimesTen installations
          managed within the same Oracle Clusterware cluster.
    
    NOTE: All installations that replicate to each other must use the same daemon
          port number that is set at installation time. The daemon port number can
          be verified by running 'ttVersion'.
    
    The default port number is 6624.
    
    Do you want to use the default port number for the TimesTen daemon? [ yes ]
    The daemon will run on the default port number (6624).
    
    In order to use the cache features in any TimesTen databases
    created within this instance, you must set a value for the TNS_ADMIN
    environment variable. It can be left blank, and a value can be supplied later
    using <install_dir>/bin/ttInstanceModify.
    
    Please enter a value for TNS_ADMIN (s=skip)? [  ] s
    What is the TCP/IP port number that you want the TimesTen Server to listen on? [ 6625 ]
    
    Would you like to use TimesTen Replication with Oracle Clusterware? [ no ]
    
    Would you like to use systemd to manage TimesTen? [ no ] yes
    
    NOTE: The TimesTen daemon startup/shutdown scripts have not been installed.
    
    The startup script is located here :
            '/scratch/ttuser/myinstance/startup/tt_myinstance.service'
    
    Run the 'setuproot' script :
            /scratch/ttuser/myinstance/bin/setuproot -install -systemd
    This will move the TimesTen startup script into its appropriate location.
    
    The 22.1 Release Notes are located here :
      '/installation_dir/tt22.1.1.1.0/README.html'
    
    Instance created successfully.
  2. ttVersionユーティリティを実行して、TimesTenインスタンスがsystemdによって管理されていることを確認します。
    $TIMESTEN_HOME/bin/ttVersion
    TimesTen Release 22.1.1.29.0 (64 bit Linux/x86_64) (myinstance:6624) 2021-07-18T07:37:31Z
      Instance admin: instanceadmin
      Instance home directory: /scratch/ttuser/myinstance
      Group owner: g900
      Daemon home directory: /scratch/ttuser/myinstance/info
      PL/SQL enabled.
      Daemon is managed by systemd.
systemdのTimesTenインスタンスが正常に構成されました。

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

TimesTenインスタンスを作成した後、次のLinuxカーネル・パラメータを構成します。

systemdでのshmmaxおよびshmallの構成

共有メモリー・セグメントの最大サイズ(shmmaxメモリー・カーネル・パラメータ)が、データベースの共有メモリー・セグメントの合計サイズを格納するのに十分な大きさになるように、Linux共有メモリーを構成する必要があります。TimesTen Classicでは、データベース全体が単一の共有メモリー・セグメントに保持されます。PL/SQLで使用される2番目のメモリー・セグメントもあります。

Linuxでは、共有メモリー・セグメントは複数のページで構成されており、デフォルトのページ・サイズは通常4KB (4096バイト)です。デフォルトのページ・サイズを確認するには、getconf PAGESIZEコマンドを実行します。

% getconf PAGESIZE
4096

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

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

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

ttShmSizeユーティリティを使用して、共有メモリー・セグメントのサイズを決定します。ttShmSizeユーティリティは、PermSizeTempSizeLogBufMBおよびConnections接続属性(指定されたデータベース用)の値を使用してこのサイズを決定します。ttShmSizeユーティリティの詳細はOracle TimesTen In-Memory DatabaseリファレンスttShmSizeを参照し、各接続属性の詳細はOracle TimesTen In-Memory DatabaseリファレンスPermSizeTempSizeLogBufMBおよびConnectionsを参照してください。

たとえば、ttShmSizeユーティリティを-connStrオプションを指定して使用して、database1 DSNを使用して共有メモリー・セグメントのサイズを確認します。PermSize値は32GB (32768MB)、TempSize値は4GB (4096MB)、LogBufMB値は1GB (1024MB)およびConnections値は2048を指定します。
% ttShmSize -connstr "DSN=database1;PermSize=32768;TempSize=4096;LogBufMB=1024;Connections=2048"
The required shared memory size is 39991547720 bytes.

ノート:

  • ttShmSizeユーティリティの-connStrオプションでは、ユーザー.odbc.iniまたはシステムsys.odbc.iniファイルのいずれかにDSNが定義されている必要があります。任意のDSNを使用できます。-connStrオプションで指定されていない接続属性の場合、ttShmSizeは、指定されたDSNに対してユーザー.odbc.iniファイルまたはシステムsys.odbc.iniファイルのいずれかに定義された設定を使用することに注意してください。接続属性が-connStrオプションとユーザー.odbc.iniファイルまたはsys.odbc.iniファイルのいずれかのどちらにもない場合、ttShmSizeは接続属性のデフォルト値を使用します。

  • DSNは、ユーザー.odbc.iniファイルまたはシステムsys.odbc.iniファイルのいずれかに追加できます。たとえば、database1 DSNを現在のオペレーティング・システム・ユーザーのユーザー.odbc.iniファイルに追加するには:

    % vi ~/.odbc.ini
    ...
    [database1]

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が他のアプリケーションで必要となる場合は、これらの例のこれらの設定を増やすことができます。

  • データベースのサイズが不明な場合は、物理メモリーのサイズの割合(80%など)に対応するようにshmmaxおよびshmallを設定できます。

HugePagesの構成

メモリー管理を効率化するためにHugePagesを構成できます。

構成後は、HugePagesに割り当てられたメモリーは、Linuxホスト上のRAM合計から取得され、他の用途には使用できません。また、HugePagesメモリー・セグメントは自動的にロックされ、ディスクにスワップできません。

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

  • データベースの共有メモリー・セグメントの最大サイズ

  • LinuxホストのHugePagesページ・サイズ

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

shmmaxおよびshmallの構成の項の例(shmmax値は39,054,246kB)およびTimesTenユーザー・グループの作成の項の例(instanceadminユーザーのグループIDは10000)を使用します:

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

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

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

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

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

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

HugePagesを構成するには、次の手順を実行します:

  1. 共有メモリー・セグメントの合計サイズ(MBで表される)をHugepagesizeの値(MBで表される)で除算して、HugePages数を決定します。この例では、共有メモリー・セグメントの合計は39,054,246kB (~38,138MB)で、Hugepagesize値は2,048kB (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は連続した使用可能メモリー領域への割当てが必要なため、ホストを再起動するまでは、要求された割当てが設定されないか、部分的にのみ設定される場合があります。/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接続属性を設定する必要はありません。

セマフォ値の設定

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

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

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

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

これらの各接続には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)を使用します。ただし、実際にはSEMMNSSEMMNI * SEMMSLより大幅に小さい場合があります。

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

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

次のステップに従って、SEMMSLおよびSEMMNI設定を構成します。ユーザーがrootであることを確認します。

  1. 既存のカーネル・パラメータ設定を表示します。
    # /sbin/sysctl -a | grep kernel.sem
    kernel.sem = 2500 320000 1000 1280
    
  2. /etc/sysctl.confファイルを編集し、SEMMSL (kernel.semの4つの値の1番目)を155と同時ユーザー接続の数の合計に変更します。

    この例では、同時ユーザー接続の数が4000であるとします。SEMMSL値を4155 (=4000+155)以上に設定します。

    さらに、SEMMNI (kernel.semの4つの値の最後)をSEMMSLの値とTimesTen固有の共有メモリー・セグメントの数の合計に変更します。(これらの共有メモリー・セグメントには、TimesTenデータベースおよびPL/SQLが含まれます。)この例では、SEMMNI4157 (=4155+2)以上に設定します。

    ノート:

    TimesTenは、Connectionsの最初の接続属性の値を使用して、TimesTenデータベースに接続できる同時ユーザー接続の最大数を決定します。TimesTenは、同時ユーザー接続の数がこの値を超えた場合にエラーを返します。デフォルト値は、2000または(SEMMSL - 155)の小さい方です。Connections属性の設定の詳細は、Oracle TimesTen In-Memory Databaseオペレーション・ガイドLinuxまたはUNIXシステムでのTimesTenサーバーのサーバーDSNの定義を参照してください。Connectionsの最初の接続属性の詳細は、Oracle TimesTen In-Memory DatabaseリファレンスConnectionsも参照してください。
    # vi /etc/sysctl.conf
    ...
    ...
    kernel.sem = 4155 400000 2000 4157
    
  3. 変更された/etc/sysctl.confファイルから設定を再ロードします。
    # /sbin/sysctl -p

ノート:

レプリケーションを使用している場合、マスター・データベースが存在する各ホストのLinuxプラットフォームでは、共有メモリーとセマフォに対して同様のカーネル設定が必要です。特に、SEMMSLおよびSEMMNIの設定は、複製が実行される前に、アクティブ・スタンバイ・レプリケーション・スキームに参加するすべてのホストで十分な大きさである必要があります。フェイルオーバーの場合、スタンバイはアクティブに対応できる必要があります。

SHMMNIパラメータの設定

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

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

次のステップに従って、SHMMNI設定を構成します。ユーザーがrootであることを確認します。

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

ノート:

レプリケーションを使用している場合、マスター・データベースが存在する各ホストのLinuxプラットフォームには、同様のSHMMNIカーネル設定が必要です。特に、複製が実行される前に、アクティブ・スタンバイ・レプリケーション・スキームに参加するすべてのホストでSHMMNI設定が十分に大きい必要があります。フェイルオーバーの場合、スタンバイはアクティブに対応できる必要があります。

自動systemd管理のための残りのステップの完了

次のステップを完了して、最初にTimesTenサービス・ファイルを確認し、必要に応じて変更します。次に、timesten_home/bin/setuprootスクリプトを実行して、TimesTenユーティリティ・スクリプトをインストールします。最後のステップとして、systemdのsystemctl startコマンドを実行して、TimesTenサービスを開始します。

  1. timesten_home/startupディレクトリにあるTimesTenサービス・ファイルを確認します(この例ではtt_myinstance.service)。必要に応じて、このファイルの#Service Limit SettingsセクションのLimitNOFILELimitMEMLOCKおよびTasksMax設定を変更します。他のセクションは変更しないでください。この例では、myinstance TimesTenインスタンスのファイルに変更を加えません。この例では、timesten_home/scratch/ttuser/myinstanceです。

    ノート:

    このファイルに他の変更を加えないでください。
    % cat /scratch/ttuser/startup/tt_myinstance.service
    #
    # Oracle TimesTen In-Memory Database
    # Copyright (c) 2020, 2021, Oracle and/or its affiliates.
    #
    ...
    # Service Limit Settings
    LimitNOFILE = 65536
    LimitMEMLOCK = infinity
    TasksMax=65536
    TimesTenサービス・ファイルを正常に確認し、必要に応じて編集しました。
  2. rootユーザーとして、-install -systemdオプションを指定してtimesten_home/bin/setuprootスクリプトを実行します。setuprootユーティリティは、インスタンスのホーム・ディレクトリ(timesten_home)を示すTIMESTEN_HOME環境変数の設定に従って動作します。この例では、timesten_home/scratch/ttuser/myinstanceです。

    timesten_home/bin/ttenvスクリプトを設定して、TimesTen環境変数を設定してください。これにより、TIMESTEN_HOMEが設定されます。次に、rootとして、setuprootユーティリティ・スクリプトを実行します。

    $ source /scratch/ttuser/myinstance/bin/ttenv.csh
    [...ttenv.csh output...]
    
    # $TIMESTEN_HOME/bin/setuproot -install -systemd
    Would you like to install the TimesTen daemon startup scripts into /lib/systemd/system? [ yes ]
    Copying /ttuser/myinstance/startup/tt_myinstance.service to /lib/systemd/system/tt_myinstance.service
    
    Successfully installed the following scripts :
    /lib/systemd/system/tt_myinstance.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/tt_myinstance.service to /lib/systemd/system/tt_myinstance.service.
    Created symlink from /etc/systemd/system/tt_myinstance.service to /lib/systemd/system/tt_myinstance.service.
    
    Use 'systemctl [start|stop] tt_myinstance.service' to manage the service
    
  3. rootユーザーとして、systemdのsystemctl startコマンドを実行して、TimesTenサービス(この例ではtt_myinstance.service)を開始します。TimesTenサービスの開始後にsystemdのsystemctlコマンドを使用する必要があります。TimesTenのttDaemonAdminユーティリティは使用できません。systemdのsystemctlコマンドの詳細は、https://www.freedesktop.org/software/systemd/man/systemctl.htmlを参照してください。
     # systemctl start tt_myinstance.service
  4. systemdのsystemctl statusコマンドを実行して、systemdがTimesTenデーモンを自動的に管理していることを確認します。この例では、installation_dirはこのインスタンスのインストール・ディレクトリの場所です。
    % systemctl status tt_myinstance.service
    ● tt_myinstance.service - TimesTen Service
       Loaded: loaded (/lib/systemd/system/tt_myinstance.service; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2021-08-18 04:56:28 PDT; 7s ago
      Process: 22636 ExecStart=/scratch/ttuser/myinstance/bin/ttDaemonAdmin -start -force -systemd (code=exited, status=0/SUCCESS)
     Main PID: 22644 (timestend)
       Memory: 53.2M
       CGroup: /system.slice/tt_myinstance.service
               ├─22644 /scratch/ttuser/myinstance/install/bin/timestend -initfd...
               ├─22648 installation_dir/tt22.1.1.29.0/bin/timestensubd -ve...
               ├─22649 installation_dir/tt22.1.1.29.0/bin/timestensubd -ve...
               └─22651 installation_dir/tt22.1.1.29.0/bin/ttcserver -verbo...
    
    Aug 18 04:56:27 myhost systemd[1]: Starting TimesTen Service...
    Aug 18 04:56:27 myhost ttDaemonAdmin[22636]: TimesTen Daemon (PID: 22644, ....
    Aug 18 04:56:28 myhost systemd[1]: Started TimesTen Service.
    Hint: Some lines were ellipsized, use -l to show in full.
    
  5. TimesTenのttStatusユーティリティを実行して、インスタンスのTimesTenデーモンがsystemdの制御および管理下にあることを確認します。
    $TIMESTEN_HOME/bin/ttStatus
    TimesTen status report as of Wed Aug 18 12:13:45 2021
    
    Daemon pid 22644 port 6624 instance myinstance
    TimesTen server pid 22651 started on port 6625
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    Accessible by group g900
    TimesTen daemon is managed by systemd
    End of report
    
TimesTenインスタンスの作成と構成に必要なステップを正常に完了しました。インスタンスのTimesTenデーモンは、自動systemd制御および管理中です。