|
Pervasive PSQL はトランザクションに関わるデータベース オペレーションのデータ整合性を「トランザクション ログ」および「トランザクション一貫性保守」の 2 つのレベルで保証します。
ここでは、以下の項目について説明します。
これらの機能はいずれも、Pervasive PSQL Control Center 内の設定を使用して、または Distributed Tuning Interface を使用してプログラムから、データベース エンジン内で有効または無効にすることができます。「トランザクション一貫性保守」および「トランザクション ログ」を参照してください。
「トランザクション一貫性保守」のデフォルト値はオフで、「トランザクション ログ」のデフォルト値はオンです。
これらの機能は共に複数ファイルのトランザクション アトミシティを提供し、確実にデータ ファイルの一貫性を保ち、未完了のトランザクションはどのデータ ファイルにも絶対に書き込まれないようにします。
アトミシティとは、トランザクション内のあるデータ オペレーションが完了しなかった場合にはトランザクション内のどのオペレーションも完了させないことを意味します。アトミックな変更はデータベースに部分的またはあいまいな変更を残しません。個々のファイルに対する変更は、トランザクション ログおよびトランザクション一貫性保守がオンでもオフでも、常にアトミックです。ただし、トランザクションでは、複数ファイルへの変更をグループ化して 1 つのアトミック グループにすることができます。これら複数ファイルのトランザクションのアトミシティは、アプリケーション内でトランザクションを使用し、トランザクション ログまたはトランザクション一貫性保守がオンに設定されている場合にのみ、MicroKernel が保証します。
これらの利点に加え、「トランザクション一貫性保守」はシステム障害時に、障害前にアプリケーションに正常終了のステータス コードを返したトランザクションの結果がすべてデータ ファイルに含まれていることを保証します。
高パフォーマンスが求められる場合には、「トランザクション ログ」はこの保証を提供できません。「トランザクション一貫性保守」は、エンジンが正常終了のステータス コードを返す前に完了したトランザクションを完全にトランザクション ログに書き出すことを確実にするため、トランザクション ログはロガー スレッドがログ バッファーをディスクにフラッシュするように指示されるとすぐに正常終了のステータス コードを返します。
[トランザクション ログ]は[トランザクション一貫性保守]のサブセットです。つまり、[トランザクション一貫性保守]の設定をオンにすると、ロギングが行われ、[トランザクション ログ]の設定はデータベース エンジンによって無視されます。
[トランザクション ログ]と[トランザクション一貫性保守]の主な違いを次の表で示します。
機能
|
複数ファイル間でのデータの整合性とトランザクション アトミシティの保証
|
正常終了のステータス コードを返したすべての完了済みトランザクションに対するコミットの保証
|
---|---|---|
トランザクション ログ
|
可
|
不可
|
トランザクション一貫性保守
|
可
|
可
|
最高のパフォーマンスを得るためには、トランザクションの安全性のニーズに合った最低レベルのロギングを使用することができます。適切なロギング レベルを決定するには、アプリケーション ベンダーに確認することが最良の方法です。同じコンピューター上の Pervasive PSQL を使用する複数のアプリケーションがある場合は、それらアプリケーションのなかで要求される最高レベルのロギングを使用する必要があります。
データ ファイルが 1 つのみであるか、複数データ ファイルによるトランザクションを行うアプリケーションがない場合は、一般的に「トランザクション一貫性保守」または「トランザクション ログ」を使用する必要はありません。このような状況下では、Pervasive PSQL はログの有無に関わらず、各データ ファイルの内部的な整合性を保証します。
Pervasive PSQL アプリケーションのうち 1 つでも複数データ ファイル間でトランザクションを行うアプリケーションがある場合は、[トランザクション ログ]をオンにします。「トランザクション ログ」を使用しないと、Pervasive PSQL ではトランザクションの複数ファイルのアトミシティまたは複数ファイルのデータ整合性を保証することはできません。
システム障害が発生した場合、このレベルのロギングでは、完了した各トランザクションがデータ ファイルに書き込まれることが保証されません。
Pervasive PSQL アプリケーションのうち 1 つでも、複数データ ファイル間の完了したトランザクションが確実にデータ ファイルに書き込まれるよう保証することが必要な場合は、「トランザクション一貫性保守」をオンに設定します。
システム障害が発生した場合、このレベルのロギングは正常終了した各トランザクションがデータ ファイルに書き込まれることを保証します。
これらの機能は、オペレーションではなくトランザクションのアトミシティを確実にするものであることに注意してください。SQL を使用する場合、トランザクションは BEGIN ステートメントまたは START TRANSACTION ステートメントと END または COMMIT ステートメントの間にある一連のオペレーションと定義されます。Btrieve を使用する場合、トランザクションは Start Transaction オペレーションと End Transaction オペレーションの間にある一連のオペレーションと定義されます。
すべてのデータ ファイルの追加および更新はログ バッファーに格納されます。トランザクションが完了するか(トランザクション一貫性保守)、バッファーがいっぱいになるか、「起動時間制限」に達する(トランザクション一貫性保守またはトランザクション ログ)と、バッファーはトランザクション ログ ファイルに書き込まれ(フラッシュされ)ます。
トランザクション ログの場合、エンジンがトランザクション終了のオペレーションを受け取り、ロガー スレッドにログ バッファーをディスクにフラッシュする指示を出すことに成功した場合、エンジンはアプリケーションに正常終了のステータス コードを返しトランザクションが開始します。トランザクション一貫性保守の場合、エンジンはロガー スレッドがバッファーをディスクに書き込むことに成功したことを示すまで正常終了のステータスを返しません。
トランザクション ログ ファイル セグメントは「トランザクション ログのディレクトリ」に設定したロケーションに保存されます。ログ セグメントは *.LOG という名前で、00000001 から FFFFFFFF までのプレフィックスが付きます。
メモ
トランザクション ログまたはトランザクション一貫性保守が有効な場合、すべてのオペレーションは、トランザクション内で行われたかどうかに関わらず、ログ ファイルに書き込まれます。ただし、トランザクション内で実行されたオペレーションのみがアトミックであることが保証されます。システム障害が発生し、トランザクション ログがロール フォワードされる場合、完了したトランザクションのみがデータ ファイルにコミットされます。対応する End Transaction オペレーションを持たないオペレーションは拒否され、データ ファイルにコミットされません。
ヒント
データベースの使用率が高い場合には、データ ファイルが存在するのとは物理的に異なるボリュームにトランザクション ログが保持されるようにシステムを構成する必要があります。一般的に高負荷の下では、単一ドライブで I/O 帯域幅を競う代わりに、ログ ファイルへの書き込みとデータ ファイルへの書き込みを別々のドライブに分ける方がパフォーマンスがよくなります。全体的なディスク I/O は減少しませんが、ロードはディスク コントローラー間で効率よく分散されます。
設定プロパティの[トランザクション ログのディレクトリ]設定を使用して、トランザクション ログのロケーションを指定することができます。
システム障害の発生時期が、ログ ファイルが書き込まれた後で、コミットされたオペレーションがシステム トランザクション内でデータ ファイルにフラッシュされる前であれば、コミットされたオペレーションが失われることはありません。コミットされたオペレーションをフラッシュするには、影響を受けるファイルをシステム障害後に開き、オペレーションを実行する必要があります。ファイルを開いてオペレーションの実行を試みると、システム障害の発生時点で影響を受けていたファイルにデータがロール フォワードされます。単にデータベース エンジンを再起動すると、ロール フォワードは呼び出されず、データの一貫性が保たれません。
メモ
ロール フォワードされたファイルに関連付けられているログ ファイルは自動的に削除されません。これは、ログ ファイルが 2 つ以上のデータ ファイルに関連付けられている可能性があるからです。
この機能により、個々のクライアント トランザクションは、成功を示すステータス コードをすばやく受け取ることが可能になると同時に、複数のクライアント トランザクションをグループにまとめてデータ ファイルに順次書き出すことでパフォーマンスが向上するという利点が得られます。
データベース サーバーのデータ ファイルが格納されているボリュームのディスクに障害が発生し、アーカイブ ログからデータを復元する必要がある場合、エンジンはトランザクション ログ ファイルをロール フォワードしません。アーカイブ ログにはトランザクション ログのすべてのオペレーションが含まれているため、トランザクション ログをロール フォワードする必要がありません。
ヒント
システム障害後、すべてのデータ ファイルを開き、それらのファイルに対して Stat オペレーションまたは読み取りオペレーションを実行してください。すべてのデータが復元されていることを確認できたら、古いログ ファイルは安全な場所に保管してもかまいません。
詳細については、以下を参照してください。
|