データベースのメモリー領域サイズの指定

TimesTenは、連続した単一のメモリー領域内に2つの個別のメモリー領域を作成してデータベース領域を管理します。1つの領域には永続データが格納され、もう1つには一時データが格納されます。

  • 永続データには、TimesTenデータベースを構成する表および索引が含まれます。データベースをメモリーにロードする際に、永続メモリー領域の内容がファイル・システム上のファイルから読み込まれます。永続メモリー領域は、チェックポイント処理の際にファイル・システムに書き込まれます。TimesTenでは、例外的なパフォーマンスを実現するために、すべてのデータがRAMに格納されます。新しいデータの断片のための領域が残っていない場合、データベースはエラーをスローします。PermSizeは、データベースの再起動によって増加できますが、減少できません。

  • 一時データには、ロック、カーソル、コンパイルしたコマンド、およびコマンドの実行と問合せ評価に必要なその他の構造が含まれます。一時メモリー領域は、データベースをメモリーにロードする際に作成され、データベースをアンロードする際に削除されます。

データベースがメモリーに格納されている場合にデータベースのサイズを制御する接続属性には、PermSizeおよびTempSizeがあります。PermSize属性には、永続メモリー領域のサイズを指定し、TempSize属性には一時メモリー領域のサイズを指定します。

ノート:

『Oracle TimesTen In-Memory Databaseリファレンス』PermSizeおよびTempSizeを参照してください。

永続データ・パーティションおよび一時メモリー領域のサイズは、データベースをメモリーにロードする際に設定され、データベースがメモリーに格納されている間は変更できません。いずれかの領域のサイズを変更するには、メモリーからデータベースをアンロードし、PermSize属性またはTempSize属性の値を変更して再度接続する必要があります。「メモリーからのデータベースのロードとアンロード」を参照してください。

次の項では、データベース・サイズの管理について説明します。

データベースのメモリー領域サイズの見積りおよび変更

データベース操作は、十分なメモリーの割当てがないと、正常に完了できません。最初に、TimesTenの永続および一時メモリー領域およびトランザクション・ログ・バッファの適切なサイズを決定します。

ttShmSizeユーティリティを使用するか、適切な見積りが得られるまでアプリケーションを実行して、次のTimesTen接続属性を設定します:

  • DSN: odbc.iniファイルで指定されます。DSNは、DSN定義の最初に大カッコで囲み1行で指定します。たとえば、[Sampledb]です。
  • PermSize: 実際のデータが格納されているデータベースの永続メモリー領域のサイズ(MB単位)。すべてのデータを保持できるようPermSizeを十分に確保してください。この値は、大きくすることはできますが、このデータベースに対して小さくすることはできません。

    TimesTen Classicでは、データベースを小さいサイズで再作成することによって、永続メモリー領域を縮小できます。「TimesTen Classicの場合のデータベース・サイズの縮小」を参照してください。

    ノート:

    TimesTen ScaleoutデータベースのPermSize接続属性について適切な値を評価する方法は、『Oracle TimesTen In-Memory Database Scaleoutユーザーズ・ガイド』PermSize属性の値の決定を参照してください。

  • TempSize: TimesTen Classicの場合、TempSizeはデータベースの一時領域に割り当てられるメモリーの合計容量をMBで示します。TimesTen Scaleoutの場合、TempSizeは、要素の一時領域に割り当てられるメモリーの合計容量をMBで示します。TempSizeが不十分な場合、関連データベース処理が失敗する可能性があります。このサイズは、データベースの再起動で変更できます。

  • LogBufMB: 内部トランザクション・ログ・バッファのサイズ(MB単位)。「ログ・バッファおよびログ・ファイル・サイズのパラメータの構成」を参照してください。

  • Connections: データベースで使用されることが予想される接続の最大数。

Oracle TimesTen In-Memory DatabaseリファレンスPermSizeTempSizeLogBufMBおよびLogFileSizeを参照してください。

次に、システムの共有メモリー・セグメントの最大サイズがデータベースを格納するために十分な大きさであることを確認します。データベースによって使用されることが予想される接続の最大数を使用します。すべての値の単位はMB (メガバイト)です。次よりも大きくなるようにします。

$ ttShmSize -connstr "DSN=sampledb;PermSize=512;TempSize=128;LogBufMB=256;Connections=2048"
The required shared memory size is 1178028616 bytes.

ノート:

TimesTen Classicデータベースがレプリケーション用に構成されている場合は、データベースのすべてのレプリカについてデータベース・サイズを再構成します。データベースのサイズを変更した後、データベースをメモリーにロードし、キャッシュ・エージェントおよびレプリケーション・エージェントを再起動します。

システム上に複数のTimesTenデータベースがあり、それぞれが独自の共有メモリー・セグメントを使用している場合、共有メモリー・セグメントの最大サイズは最大データベースに対応できる十分な大きさである必要があります。

次に、必要な共有メモリー割当て合計を決定します(適切な単位に変換されます)。システム上に複数のTimesTenデータベースがある場合、データベースごとに前述の式を使用して、共有メモリー割当て合計をこれらすべてに対応できる十分な大きさにする必要があります。(その後、たとえばLinuxでは、この値をページ・サイズ(通常、4096バイト)で除算して、ページ単位のメモリー割当て合計を取得します。)

ノート:

TimesTen Classicにおいて、追加で共有セグメントを作成する場合は、PL/SQLでPLSQL_MEMORY_SIZE接続属性を使用するか、クライアント/サーバーで(timesten.conf内で)-server_shmsize構成オプションを使用します。Oracle TimesTen In-Memory DatabaseリファレンスPLSQL_MEMORY_SIZEを参照してください。デフォルト値または同様に小さいサイズを使用する場合は、これらのセグメントに対応するために共有メモリー内に十分な未使用領域がある必要があります。

最後に、データベースの無効化を許容する場合は、少なくともTimesTenデータベースの最大サイズの2倍以上の物理メモリーが必要になります。許容しないが、無効化が発生した場合は、データベースを使用するすべてのプロセスおよび接続が検出されて終了されるまで、データベースをメモリーに再ロードできません。

『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』Linuxの前提条件を参照してください。

PermSize属性およびTempSize属性の監視

SYS.V$MONITORおよびSYS.GV$MONITORシステム・ビューには、PermSizeおよびTempSizeの使用状況の監視に使用できるいくつかの列があります。

具体的には、PERM_ALLOCATED_SIZETEMP_ALLOCATED_SIZEPERM_IN_USE_SIZEPERM_IN_USE_HIGH_WATERTEMP_IN_USE_SIZEおよびTEMP_IN_USE_HIGH_WATERの各列です。これらの各列には、データベースに現在割り当てられているサイズや、データベースの使用中のサイズがKB単位で表示されます。この情報は、接続が確立または解放されるたび、およびトランザクションがコミットまたはロールバックされるたびにシステムによって更新されます。

たとえば、全ワークロードを実行し、一時領域の使用量の多い水位標(TEMP_IN_USE_HIGH_WATER)を監視して、一時領域の使用量を評価できます。最高水位標は、ttMonitorHighWaterReset組込みプロシージャを使用してリセットできます。また、必要に応じて、TempSizeを監視対象のTEMP_IN_USE_HIGH_WATER値に変更し、10%を追加することもできます。

ノート:

ttIsqlのdssizeコマンドを使用して、この情報を提供することもできます。『Oracle TimesTen In-Memory Databaseリファレンス』ttIsqlのdssizeコマンドの使用およびttIsqlを参照してください。

データベース内のブロック・レベルの断片化を監視するには、SYS.V$BLOCK_INFOまたはSYS.GV$BLOCK_INFOシステム表を使用するか、ttBlockInfo組込みプロシージャをコールします。

これらのビューの詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』SYS.GV$MONITORSYS.V$MONITORSYS.GV$BLOCK_INFOまたはSYS.V$BLOCK_INFOを参照してください。『Oracle TimesTen In-Memory Databaseリファレンス』ttBlockInfoを参照してください。

TimesTen Classicの場合のデータベース・サイズの縮小

TimesTen Classicデータベースに特定のサイズの永続領域(PermSize DSN属性で示される)を定義した場合は、表または行を削除しても、それより小さいサイズに縮小できません。

TimesTen Classicデータベースの永続領域の割当てサイズを減らすには、ttMigrateユーティリティを実行してデータベースのコピーを保存してから、永続領域のサイズがより小さいデータベースを再作成し、データをリストアします。

TimesTen Classicデータベースの永続領域サイズを縮小するには、次のステップを実行します。

  1. ttAdmin -disconnectコマンドを使用して、データベースからアプリケーションを切断します。このマニュアル内の「TimesTen Classicでのデータベースからの切断」、および『Oracle TimesTen In-Memory Databaseリファレンス』ttAdminを参照してください。
  2. ttMigrate -cオプションを使用してデータベースのデータ・ファイルを作成します。
    ttMigrate -c database1 /tmp/database1
  3. メモリーからTimesTen Classicデータベースをアンロードします。「TimesTen Classicの場合のメモリーからのデータベースのアンロード」を参照してください。
  4. より小さいPermSize値を指定するデータベースの新しいコピー用に、新しいDSN定義を作成します。新しいDSNを作成するのではなく、元のDSNを変更する場合は、ttDestroyユーティリティを使用して元のTimesTen Classicデータベースを破棄してから、バックアップをリストアする必要があります。
  5. AutoCreate=1を指定したttIsqlを使用して、TimesTen Classicデータベースを再作成します。
    ttIsql -connstr "dsn=database1;AutoCreate=1" -e "quit"

    この時点でデータベースは空です。

  6. ttMigrate -rオプションおよび-relaxedUpgradeオプションを使用して、バックアップをリストアします。
    ttMigrate -r -relaxedUpgrade database1 /tmp/database1

ノート:

  • TimesTen Classicデータベースの永続領域のサイズは、現在データベースに格納されているデータで必要なサイズより小さくすることはできません。この値は、v$monitorシステム・ビューのperm_in_use_size列を問い合せることで判断できます。

  • また、この手順を使用して、部分的な全表ページ、または索引ノードと範囲外の値を格納するヒープ・バッファに起因する断片化を減らすためにTimesTen Classicデータベースを圧縮することもできます。

メモリー不足の警告受信

メモリー不足の警告を受信するには、アプリケーションでttWarnOnLowMemory組込みプロシージャをコールする必要があります。

TimesTen Classicには、メモリー不足の警告を発行するタイミングを指定するPermWarnThresholdおよびTempWarnThresholdの2つの一般接続属性も用意されています。いずれの属性も、パーセントで値を指定します。