Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

Knihovna IBSurgeon

Firebird 2.0 garbage collector

Engine zná každou verzi záznamu vytvořenou příkazem UPDATE/DELETE a může je odstranit, jakmile to nejstarší snímková transakce (OST) umožní. Tím odpadá nutnost znovu číst stránky s těmito verzemi na základě požadavku uživatele (např. SELECT COUNT(*) FROM table) a předchází se situaci, kdy tyto verze nejsou nikdy přečteny (samozřejmě sweep vždy odstranil všechny nepoužité verze záznamů). Také je vysoká pravděpodobnost, že potřebné stránky stále zůstávají ve vyrovnávací paměti, takže je potřeba méně dodatečných diskových I/O operací.

Mezi okamžikem, kdy je garbage collector upozorněn na stránku s nepoužitými verzemi, a okamžikem, kdy garbage collector tuto stránku přečte, může nová transakce aktualizovat záznam a garbage collector nemůže tento záznam vyčistit, pokud je číslo této nové transakce vyšší než OST nebo je stále aktivní. V tomto případě engine znovu upozorní garbage collector na číslo této stránky a ten garbage vyčistí později (starý garbage collector na tuto stránku “zapomene”, dokud ji uživatel znovu nepřečte).

Nyní je možná jak kooperativní, tak i běhová (background) garbage collection. Pro její řízení byl zaveden nový konfigurační parametr “GCPolicy”. Lze jej nastavit na:

  • a) cooperative - garbage collection se provádí pouze v kooperativním režimu, jako před IB6. Každý uživatelský požadavek je odpovědný za odstraňování nepoužitých verzí záznamů. Takto engine pracoval před IB6. Toto je jediná možnost pro režim Classic Server. Engine nesleduje verze vytvořené jako výsledek příkazů UPDATE a DELETE.

  • b) background - garbage collection se provádí pouze běhovým vláknem, jako v IB6 a novějších verzích. Žádné uživatelské požadavky neodstraňují nepoužité verze záznamů. Místo toho uživatelský požadavek upozorní vyhrazené vlákno garbage collectoru na číslo stránky, kde byla zjištěna nepoužitá verze záznamu. Engine si také pamatuje čísla stránek, kde příkaz UPDATE/DELETE vytvořil backverze.

  • c) combined - provádí se jak běhová, tak kooperativní garbage collection.

Výchozí hodnota je “combined” pro SuperServer. ClassicServer tento parametr ignoruje a vždy pracuje v režimu “cooperative”.