Deze pagina is automatisch vertaald. Lees het Engelse origineel. English

IBSurgeon-bibliotheek

Firebird 2.0 garbage collector

De engine weet van elke recordversie die door een update/delete-instructie is geproduceerd en kan deze verwijderen zodra de oudste snapshot-transactie (OST) dit toestaat. Dit elimineert de noodzaak om deze versies opnieuw te lezen bij een gebruikersverzoek (d.w.z. SELECT COUNT(*) FROM table) en voorkomt de situatie waarin deze versies nooit worden gelezen (natuurlijk verwijderde sweep altijd alle ongebruikte recordversies). Ook is er een grote kans dat de benodigde pagina’s nog in de buffercache aanwezig zijn, waardoor er minder extra schijf-I/O nodig is.

Tussen het melden van de garbage collector over een pagina met ongebruikte versies en het moment waarop de garbage collector deze pagina leest, kan een nieuwe transactie een record bijwerken en kan de garbage collector dit record niet opschonen als dit nieuwe transactienummer boven de OST ligt of nog actief is. In dit geval meldt de engine opnieuw de garbage collector met dit paginanummer en zal het vuilnis later opruimen (de oude garbage collector zal deze pagina “vergeten” totdat de gebruiker deze opnieuw leest).

Zowel coöperatieve als achtergrond-garbage collection zijn nu mogelijk. Om dit te beheren is een nieuwe configuratieparameter “GCPolicy” geïntroduceerd. Deze kan worden ingesteld op:

  • a) coöperatief - garbage collection wordt alleen in coöperatieve modus uitgevoerd, zoals vóór IB6. Elk gebruikersverzoek is verantwoordelijk voor het verwijderen van ongebruikte recordversies. Dit is hoe de engine werkte vóór IB6. Dit is de enige optie voor Classic Server-modus. De engine houdt geen versies bij die zijn geproduceerd als resultaat van update- en delete-instructies

  • b) achtergrond - garbage collection wordt alleen uitgevoerd door een achtergrondthread, zoals in IB6 en later. Geen gebruikersverzoeken verwijderen ongebruikte recordversies. In plaats daarvan meldt een gebruikersverzoek een speciale garbage collector-thread met het paginanummer waar een ongebruikte recordversie is gedetecteerd. Ook onthoudt de engine paginanummers waar een update/delete-instructie backversies heeft gemaakt.

  • c) gecombineerd - zowel achtergrond- als coöperatieve garbage collection worden uitgevoerd.

Standaard is “gecombineerd” voor SuperServer. ClassicServer negeert deze parameter en werkt altijd in “coöperatieve” modus.