データベースのメモリー領域サイズの指定
TimesTenは、連続した単一のメモリー領域内に2つの個別のメモリー領域を作成してデータベース領域を管理します。1つの領域には永続データが格納され、もう1つには一時データが格納されます。
-
永続データには、TimesTenデータベースを構成する表および索引が含まれます。データベースをメモリーにロードする際に、永続メモリー領域の内容がファイル・システム上のファイルから読み込まれます。永続メモリー領域は、チェックポイント処理の際にファイル・システムに書き込まれます。TimesTenでは、例外的なパフォーマンスを実現するために、すべてのデータがRAMに格納されます。新しいデータの断片のための領域が残っていない場合、データベースはエラーをスローします。
PermSize
は、データベースの再起動によって増加できますが、減少できません。 -
一時データには、ロック、カーソル、コンパイルしたコマンド、およびコマンドの実行と問合せ評価に必要なその他の構造が含まれます。一時メモリー領域は、データベースをメモリーにロードする際に作成され、データベースをアンロードする際に削除されます。
データベースがメモリーに格納されている場合にデータベースのサイズを制御する接続属性には、PermSize
およびTempSize
があります。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リファレンスのPermSize、TempSize、LogBufMBおよび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_SIZE
、TEMP_ALLOCATED_SIZE
、PERM_IN_USE_SIZE
、PERM_IN_USE_HIGH_WATER
、TEMP_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$MONITOR、SYS.V$MONITOR、SYS.GV$BLOCK_INFOまたはSYS.V$BLOCK_INFOを参照してください。『Oracle TimesTen In-Memory Databaseリファレンス』のttBlockInfoを参照してください。
TimesTen Classicの場合のデータベース・サイズの縮小
TimesTen Classicデータベースに特定のサイズの永続領域(PermSize
DSN属性で示される)を定義した場合は、表または行を削除しても、それより小さいサイズに縮小できません。
TimesTen Classicデータベースの永続領域の割当てサイズを減らすには、ttMigrate
ユーティリティを実行してデータベースのコピーを保存してから、永続領域のサイズがより小さいデータベースを再作成し、データをリストアします。
TimesTen Classicデータベースの永続領域サイズを縮小するには、次のステップを実行します。
ノート:
-
TimesTen Classicデータベースの永続領域のサイズは、現在データベースに格納されているデータで必要なサイズより小さくすることはできません。この値は、
v$monitor
システム・ビューのperm_in_use_size
列を問い合せることで判断できます。 -
また、この手順を使用して、部分的な全表ページ、または索引ノードと範囲外の値を格納するヒープ・バッファに起因する断片化を減らすためにTimesTen Classicデータベースを圧縮することもできます。