この項では、メモリー領域、ディスク領域、ファイル記述子、セマフォなどのリソースをTimesTenが使い果たしたときに確認する事項を説明します。
状態
|
対処
|
---|---|
メモリー消費量が高い | |
メモリー領域を使い果たす | |
ディスク領域を使い果たす | |
ログ領域を使い果たす | |
ファイル記述子を使い果たす | |
セマフォを使い果たす | |
CPUを使い果たす | スタック・トレースを取得して、テクニカル・サポートに連絡する |
top
、vmstat
、sar
などのオペレーティング・システム・ツールによって、プロセスおよびメモリー使用量に関する統計を取得します。これらのツールの出力では、各プロセスの共有メモリー使用量がレポートされますが、共有メモリー使用量の合計値はレポートされないため、TimesTenのメモリー消費量のインジケータとして誤解を招く可能性があります。共有メモリーは共有の定義によって異なるため、TimesTenプロセスのメモリーに関する様々な統計を加算すると、TimesTenで使用されるメモリー量より大きく見積もられます。
TimesTenでは、永続データ・パーティションと一時データ・パーティションの両方を使用します。これらのパーティションに割り当てられるメモリーの量は、データ・ストアのDSN定義のPermSizeおよびTempSize属性で設定されます。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のデータ・ストアのサイズ指定に関する説明を参照してください。
TimesTenデータ・ストアが一杯になった場合、永続セグメントと一時セグメントのどちらが一杯かを判断することが重要です。ttIsql dssizeコマンドを使用して、永続データ・パーティションおよび一時データ・パーティションについて、割当てサイズ、使用中のサイズおよび最高水位標サイズをリストします。永続セグメントは表および索引データで構成され、一時セグメントは、ロック、ソート領域、コンパイル済コマンドの内部構造で構成されています。
SYS.MONITOR表のTEMP_ALLOCATED_SIZE、TEMP_IN_USE_SIZEおよびTEMP_IN_USE_HIGH_WATERの値を確認して、十分な一時領域があることも確認できます。
SELECT TEMP_ALLOCATED_SIZE, TEMP_IN_USE_SIZE,
TEMP_IN_USE_HIGH_WATER
FROM SYS.MONITOR;
トランザクションを短くして、データ・ストアに十分な一時領域が確実にあるようにすることで、ロックによって残りのすべての一時領域が占有されることを回避します。トランザクションによって大量の行ロックが取得される場合は、表ロックを使用することもできます。
データ・ストアのサイズを見積もる際のヒントについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のデータ・ストアの正しいサイズ調整に関する説明を参照してください。
索引に破棄できるものがないかを検討してください。実際に使用されている索引は、問合せ計画を参照するとわかります。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の問合せオプティマイザ計画の参照と変更の説明を参照してください。
また、ttSizeユーティリティを使用して、データ・ストア内の各表が使用するメモリーの量を見積もることもできます。格納する必要のあるデータ量が多すぎる場合は、データ・ストアのPermSize属性を再設定して、永続セグメントのサイズを大きくする必要があります。たとえば、メモリー・セグメントのサイズに制限があるために、一時セグメントを縮小したり、データ・ストアを拡大することができない場合、かわりに、データを複数の異なるデータ・ストアに分割する必要があります。
永続セグメントが一杯になったときに、データ・ストアからデータをコピーして取り出し、データをすべて削除し、その後データを元に戻すことで、領域を解放することもあります。この作業は、ttMigrateユーティリティを-noRepUpgrade
オプションとともに使用し、データを外部へ移行した後、データ・ストアを破棄してから再作成し、データを元に戻すことによって、より効率的に行うことができます。この操作の詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のデータ・ストア・サイズの縮小に関する説明を参照してください。
最後に、プロセスにより多くの量の共有メモリーが割り当てられるように、オペレーティング・システムを構成する必要がある場合があります。また、仮想メモリーにより多くのスワップ領域を割り当てる必要があることもあります。詳細は、「使用可能なスワップ領域(仮想メモリー)を確認する」を参照してください。
統計が古いために、いくつかのコマンドで割り当てている領域が多すぎる可能性があります。詳細は、「問合せオプティマイザの統計を更新する」を参照してください。
統計を更新しても一時セグメントのメモリーの使用量が減らない場合は、すべての接続を切断してから、再接続します。すべての接続が切断されたかどうかは、ttStatusユーティリティで確認します。これですべての一時領域が解放されますが、コマンドを再準備する必要はあります。
問題が繰り返し発生する場合は、データ・ストアを監視して問題の原因を特定します。ttWarnOnLowMemoryプロシージャを使用して、データ・ストアが一杯になったかどうかを示すデーモン・ログの警告を有効にします。
データ・ストアには十分な空き領域があるように見えても、問合せを実行するとデータ・ストア領域を使い果たしてしまう場合は、ttOptUpdateStatsまたはttOptEstimateStatsプロシージャを使用して、オプティマイザの統計データが更新されていることを確認します。問合せの中には、実行時に一時領域の割当てが必要なものがあります。必要な一時領域の量は、問合せに使用する表の統計から見積もられます。正しい統計データがないと、必要な一時領域が少なく見積もられることがあります。
詳細は、「問合せオプティマイザの使用」を参照してください。
スワップ領域を使い果たしたことを示すエラーを受け取った場合は、使用可能なスワップ領域(仮想メモリー)の量を増やす必要があります。
UNIXシステムの場合は、swapコマンドを使用して、現在システムに対して設定されている仮想メモリーの量を確認し、再設定します。
Windowsシステムの場合は、「コントロール パネル」→「システム」→「詳細」を選択して、仮想メモリーのサイズを確認し、再設定します。
TimesTenは、データ・ストア属性で指定されているディレクトリに格納されている2つのチェックポイント・ファイルのいずれかにデータ・ストアのコピーを保存します。各チェックポイント・ファイルはディスク上で大きくなり、共有メモリー内のデータ・ストアのサイズと同等になる可能性があります。各永続データ・ストアについて、2つのチェックポイント・ファイルとログ・ファイル(ディスクへのロギングが有効な場合)を保存するための十分なディスク領域が必要です。
ログ・ファイルはLogDir属性で指定されたディレクトリに蓄積され、チェックポイントが実行されたときにのみ削除されます。DSNにLogDir属性が指定されていない場合は、データ・ストア属性で指定されたディレクトリにログ・ファイルが蓄積されます。ログ・ファイルの最大サイズは、LogFileSize属性で設定されます。
ディスクがTimesTenデータで一杯になる原因のほとんどは、ログ・ファイルの蓄積です。TimesTenでは、チェックポイント処理、バックアップ、レプリケーションなどの様々な目的でログ・ファイルが使用されます。どの操作がログ・ファイルを保持するかを特定することが重要であり、これによって、ログ・ファイルを適切にパージできるように適切なアクションをとることができます。これは、ttLogHolds組込みプロシージャを使用して行います。ログの保持には6つのタイプがあります。次の説明を参照してください。
多数の行を削除するトランザクションがアプリケーションにあるときは、一時ディレクトリがあるディスクで、領域を余分に解放する必要がある場合があります。トランザクションによってデータ・ストアの大きな領域が解放されたときに、TimesTenでは一時ファイルを作成します。詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のデータ・ストアのサイズ変更に関する説明を参照してください。一時ディレクトリの場所は変更できます。それには、WindowsではTMP環境変数、UNIXではTMPDIR環境変数を設定します。詳細は、「ttRepAdmin -duplicate実行時の問題」を参照してください。
ディスクの使用には、次の属性が関係します。
.arch
を付加して、不要になったログ・ファイルの名前を変更します。名前を変更した後は、不要になったときに手動でログ・ファイルを削除する必要があります。ログ・ファイルをパージしないと、TimesTenで不要になったときも、ログ・ファイルが蓄積され続けて領域を浪費します。 IPCとしての共有メモリー・セグメントを許可するように構成されたTimesTenデータ・ストアに対する複数のクライアント/サーバー接続を作成する場合、TimesTenでセマフォを作成できなかったことを示すエラーが発生することがあります。
セマフォの制限はプラットフォームに依存しています。詳細は、オペレーティング・システムのドキュメントおよび『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のセマフォの数の増加に関する説明を参照してください。