ヘッダーをスキップ

Oracle TimesTen In-Memory Databaseアーキテクチャ概要 リリース6.0 B25763-01 |
| 目次 | 索引

前へ | 次へ |

## ロギング

「ロギング」で説明するように、TimesTenのログは、システム障害が発生した場合のトランザクションの再実行、ロールバックするトランザクションの取り消し、他のデータ・ストアへの変更のレプリケート、Oracleデータベースへの変更のレプリケートを行うために使用されます。また、TimesTenのログを使用すると、アプリケーションでは（「トランザクション・ログAPI」で説明するXLAインタフェースを使用して）表への変更を監視できます。

図7.1に示すように、TimesTenはロギングを2つのレベルで有効にします。

- インメモリー・トランザクション・ログ・バッファ
- オンディスク・ログ・ファイル

図7.1 2つのレベルのロギング

## ロギング・オプション

TimesTenのLogging構成属性を使用することで、ユーザーはデータ・ストアのロギング動作を微調整し、パフォーマンスと永続性の最適な構成を実現できます。

ロギング・オプションは次のとおりです。

- ディスク・ベースのロギング
- ロギングの無効化

注意: データ・ストアに対して選択するロギング・オプションは、メモリーにロードされた時点でそのデータ・ストアの固定プロパティになります。異なる同時接続で異なるロギング・オプションは使用できません。

### ディスク・ベースのロギング

アプリケーションでは、ログ・バッファの内容をディスク・ベースのログ・ファイルに定期的に書き込むことによって、データの永続性が得られます。ユーザーは、このディスクへの書込み処理がコミット時に自動的に行われるように、TimesTenを設定できます。または「永続コミットと非永続コミット」で説明するように、アプリケーションでttDurableCommits()組込みプロシージャ・コールを使用して、手動でこの処理を行うこともできます。ログ・バッファが一杯になると、TimesTenはその内容をディスク上のログ・ファイルに自動的に書き込みます。

ディスク・ベースのロギングを有効にすると、TimesTenはトランザクションの完了（コミット）の一部として、データ・ストアの変更のコピーをディスクに記録します。ログ・ファイルに保存されたトランザクションは、ロールバックできます。また、ログ・ファイルの内容を使用して、データ・ストアを最後にコミットした状態にリカバリできます。ただし、ディスク・アクセスは比較的遅いため、ディスク・ベースのロギングは、トランザクションのレスポンス時間とシステム全体のスループットに影響を及ぼす可能性があります。

ログ・ファイルは、データ・ストア・ファイルと同じディレクトリ、あるいはDSNのLogDir属性で指定したディレクトリに生成されます。ユーザーは、LogBuffSize属性を使用してインメモリー・ログ・バッファのサイズを、またLogFileSize属性を使用してログ・ファイルのサイズを設定できます。ログ・ファイルが一杯になると、TimesTenは新しいログ・ファイルを作成します。ログ・ファイルはDataStoreName.lognという名前になります。ここで、nは0で始まる整数で、新しいログ・ファイルが作成されるたびに増加されます。

### ロギングの無効化

ロギングを無効にすると、パフォーマンスが向上します。ただし、ロギングを無効にすると、トランザクションのロールバックまたはリカバリは不可能となり、データ・ストア・レベル・ロックのみが可能です。ロギングを無効にするのは、データ・ストアのバルク・ロードのように、障害が発生した場合に最初から再実行できる処理のみにする必要があります。

## 自動コミット

ODBCでは、各文の後にコミットを強制する自動コミット・モードが提供されます。デフォルトでは自動コミットが有効になり、文の実行に成功した直後に暗黙的コミットが発行されます。また、文の実行に失敗した直後には、暗黙的ロールバックが発行されます。文の実行の成否にかかわらず、開いたカーソルがある接続では、そのカーソルがすべて閉じた後にのみ、自動コミットまたはロールバックが発行されます。アプリケーションで、複数の文を含むトランザクションを必要とする場合、自動コミットを無効にして、明示的にコミットを発行する必要があります。

最適なパフォーマンスを判断するには、様々なコミットの頻度をテストする必要があります。たとえば、DurableCommitsが有効な場合は、コミットを頻繁に実行するとディスクへの書込みが増加し、パフォーマンスが低下します。一方、コミットを頻繁に実行しない場合は、ロックが長期にわたって保持され、トランザクションのロールバックに要する時間が長くなり、同時実行性が低下します。

自動コミットを有効または無効にするには、アプリケーションで、ODBC SQLSetConnectOption関数またはJDBC Connection.setAutoCommitメソッドをコールします。

## 永続コミットと非永続コミット

「ディスク・ベースのロギング」で説明したように、ディスク・ベースのロギングが有効な場合は、トランザクション・ログ・バッファのデータがディスクに書き込まれるタイミングをアプリケーションで制御できます。TimesTenではDurableCommits属性を使用して、ログ・バッファがトランザクションのコミット時に自動的にディスクに書き込まれるか、アプリケーションでttDurableCommit()プロシージャをコールするまで遅延されるかを指定します。

トランザクションのコミット時に、ログが自動的にディスクに書き込まれないようにDurableCommitsを設定すると、障害発生時に一部のコミット済トランザクションの結果が失われる危険はありますが、トランザクションの実行時間は短縮されます。ただし、DurableCommitsの設定にかかわらず、メモリー内のログ・バッファが一杯になると、ログはディスクに保存されます。

ディスクへのロギングが無効な場合、永続コミットは実行できません。この場合、データの永続性は、アプリケーションで明示的に開始できるチェックポイントによって実現できます。データ・ストアへの最後の接続が正常に終了すると、TimesTenは自動的にチェックポイントを開始します。詳細は、「チェックポイント」を参照してください。

## ログ・ファイルの削除

データ・ストアのチェックポイント処理が行われると、ログ・ファイルがディスクから削除されます（後述の「チェックポイント」を参照）。ログ・ファイルは、TimesTenで消去可能と宣言されるまで保持されます。ログ・ファイルは次の処理が完了するまで消去できません。

- ログ・ファイル（または前のログ・ファイル）にログ・レコードを書き込むすべてのトランザクションが、コミットまたはロールバックされる。
- ログ・ファイルに記録されたすべての変更が、ディスク上のチェックポイント・ファイルに書き込まれる。
- ログ・ファイルに記録されたすべての変更が、レプリケートされる（レプリケーションが使用されている場合）。
- ログ・ファイルに記録されたすべての変更が、Oracleに伝播される（Cache Connectが使用されている場合）。
- ログ・ファイルに記録されたすべての変更が、XLAアプリケーションにレポートされる（XLAが使用されている場合）。