このページは機械翻訳されています。英語の原文をお読みください。 English

IBSurgeon ライブラリ

Firebird 2.0 ガベージコレクタ

エンジンは、UPDATE/DELETE文によって生成された各レコードバージョンを認識しており、最も古いスナップショットトランザクション(OST)が許可した時点でそれらを削除できます。これにより、ユーザー要求(例:SELECT COUNT(*) FROM table)でこれらのバージョンを含むページを再度読み取る必要がなくなり、これらのバージョンが読み取られないままになる状況を回避できます(もちろん、スイープは常に未使用のレコードバージョンをすべて削除します)。また、必要なページがバッファキャッシュに残っている可能性が高いため、追加のディスクI/Oが少なくて済みます。

未使用バージョンを含むページをガベージコレクタに通知してから、ガベージコレクタがこのページを読み取るまでの間に、新しいトランザクションがレコードを更新する可能性があり、この新しいトランザクション番号がOSTより上またはまだアクティブな場合、ガベージコレクタはこのレコードをクリーンアップできません。この場合、エンジンは再度このページ番号をガベージコレクタに通知し、ガベージは後でクリーンアップされます(古いガベージコレクタは、ユーザーが再度読み取るまでこのページを「忘れ」ます)。

協調型とバックグラウンド型の両方のガベージコレクションが可能になりました。これを管理するために、新しい設定パラメータ「GCPolicy」が導入されました。次のように設定できます:

  • a) cooperative - ガベージコレクションは協調モードでのみ実行されます(IB6以前と同様)。各ユーザー要求が未使用のレコードバージョンの削除を担当します。これはIB6以前のエンジンの動作方法です。これはClassic Serverモードでのみ利用可能なオプションです。エンジンはUPDATEおよびDELETE文の結果として生成されたバージョンを追跡しません。

  • b) background - ガベージコレクションはバックグラウンドスレッドのみで実行されます(IB6以降と同様)。ユーザー要求は未使用のレコードバージョンを削除しません。代わりに、ユーザー要求は未使用のレコードバージョンが検出されたページ番号を専用のガベージコレクタスレッドに通知します。また、エンジンはUPDATE/DELETE文がバックバージョンを作成したページ番号を記憶します。

  • c) combined - バックグラウンドと協調の両方のガベージコレクションが実行されます。

デフォルトはSuperServerでは「combined」です。ClassicServerはこのパラメータを無視し、常に「cooperative」モードで動作します。