Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Firebird 2.0 garbage collector

Engine знаје за сваку верзију записа коју је произвела UPDATE/DELETE изјава и може их уклонити чим најстарија транзакција са снимком (OST) то дозволи. Ово елиминише потребу да се странице са овим верзијама поново читају на захтев корисника (нпр. SELECT COUNT(*) FROM table) и избегава ситуацију када се ове верзије никада не читају (наравно, sweep је увек уклањао све неискоришћене верзије записа). Такође постоји велика вероватноћа да су потребне странице још увек у бафер кешу, па је потребно мање додатних диск I/O операција.

Између обавештавања garbage collector-а о страници са неискоришћеним верзијама и тренутка када garbage collector прочита ову страницу, нова транзакција може ажурирати запис и garbage collector не може очистити овај запис ако је број нове транзакције изнад OST или је још увек активна. У овом случају engine поново обавештава garbage collector са бројем странице и он ће очистити смеће касније (стари garbage collector ће “заборавити” ову страницу док је корисник поново не прочита).

Сада су могући и кооперативно и позадинско сакупљање смећа. Да би се то управљало, уведен је нови конфигурациони параметар “GCPolicy”. Може се поставити на:

  • a) cooperative - сакупљање смећа се обавља само у кооперативном режиму, као пре IB6. Сваки кориснички захтев је одговоран за уклањање неискоришћених верзија записа. Овако је engine радио пре IB6. Ово је једина опција за Classic Server режим. Engine не прати верзије настале као резултат UPDATE и DELETE изјава

  • b) background - сакупљање смећа се обавља само помоћу позадинске нити, као у IB6 и касније. Ниједан кориснички захтев не уклања неискоришћене верзије записа. Уместо тога, кориснички захтев обавештава наменску нит garbage collector-а са бројем странице где је откривена неискоришћена верзија записа. Такође engine памти бројеве страница где је UPDATE/DELETE изјава креирала позадинске верзије.

  • c) combined - обављају се и позадинско и кооперативно сакупљање смећа.

Подразумевано је “combined” за SuperServer. ClassicServer игнорише овај параметар и увек ради у “cooperative” режиму