データベースに割り当てられたメモリーの量を確認する
TimesTenでは、永続メモリー領域と一時メモリー領域を使用します。これらの領域に割り当てられるメモリーの量は、データベースのDSN定義のPermSizeおよびTempSize属性で設定されます。
TimesTenデータベースが一杯になった場合、永続メモリー領域と一時メモリー領域のどちらが一杯かを判断することが重要です。ttIsql dssizeコマンドを使用して、永続メモリー領域および一時メモリー領域について、割当てサイズ、使用中のサイズおよび最高水位標サイズをリストします。dssizeコマンドを実行すると、SYS.MONITORから次の値が取得されます。
-
PERM_ALLOCATED_SIZE -
PERM_IN_USE_SIZE -
PERM_IN_USE_HIGH_WATER -
TEMP_ALLOCATED_SIZE -
TEMP_IN_USE_SIZE -
TEMP_IN_USE_HIGH_WATER
永続メモリー領域は表および索引データで構成され、一時メモリー領域はロック、ソート領域およびコンパイル・コマンドなどの内部構造で構成されます。
トランザクションを短くして、データベースに十分な一時領域が確実にあるようにすることで、ロックによって残りのすべての一時領域が占有されることを回避します。トランザクションによって大量の行ロックが取得される場合は、表ロックを使用することもできます。
データベースのサイズを見積る方法についてのヒントは、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「データベースの適切なサイズ設定」を参照してください。
永続メモリー領域が一杯である
索引に破棄できるものがないかを検討してください。実際に使用されている索引は、問合せ計画を参照するとわかります。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の「ttIsqlの使用による問合せオプティマイザ計画の表示および変更」を参照してください。ttRedundantIndexCheckプロシージャを使用して、冗長な索引を見つけることもできます。このプロシージャでは、破棄する索引に関する提案が返されます。
ttSizeユーティリティを使用すると、データベース内の各表が使用するメモリーの量を見積もることができます。格納する必要のあるデータ量が多すぎる場合は、データベースのPermSize属性を再設定して、永続メモリー領域のサイズを大きくする必要があります。メモリーのサイズに制限があるために、一時メモリー領域を縮小したり、データベースを拡大することができない場合などは、かわりに、データを複数の異なるデータベースに分割する必要があります。
永続メモリー領域が一杯になったときに、データベースからデータをコピーして取り出し、データをすべて削除し、その後データを元に戻すことで、領域を解放することもあります。これは、ttMigrateユーティリティ-relaxedUpgradeオプションを使用してデータを外部に移行し、データベースを廃棄、再生成してから元に戻すと、より効果的です。
最後に、プロセスにより多くの量の共有メモリーが割り当てられるように、オペレーティング・システムを構成する必要がある場合があります。また、仮想メモリーにより多くのスワップ領域を割り当てる必要があることもあります。
一時メモリー領域が一杯である
統計が古いために、いくつかのコマンドで割り当てている領域が多すぎる可能性があります。詳細は、「問合せオプティマイザの統計を更新する」を参照してください。
統計を更新しても一時メモリー領域が減らない場合は、すべての接続を切断してから、再接続します。すべての接続が切断されたかどうかは、ttStatusユーティリティで確認します。これですべての一時領域が解放されますが、コマンドを再準備する必要はあります。
問合せのメモリー使用量を診断します。詳細は、「問合せで使用されるメモリーを確認する」を参照してください。