Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Collecteur de déchets Firebird 2.0

Le moteur connaît chaque version d’enregistrement produite par les instructions update\delete et peut les supprimer dès que la plus ancienne transaction snapshot (OST) le permet. Cela élimine la nécessité de relire les pages contenant ces versions à la demande de l’utilisateur (par exemple SELECT COUNT(*) FROM table) et évite les situations où ces versions ne sont jamais lues (bien sûr, le sweep a toujours supprimé toutes les versions d’enregistrement inutilisées). Il y a également une forte probabilité que les pages nécessaires résident encore dans le cache de tampons, ce qui réduit les E/S disque supplémentaires.

Entre la notification au ramasse-miettes concernant une page avec des versions inutilisées et le moment où le ramasse-miettes lira cette page, une nouvelle transaction peut mettre à jour l’enregistrement et le ramasse-miettes ne peut pas nettoyer cet enregistrement si le numéro de cette nouvelle transaction est supérieur à l’OST ou s’il est encore actif. Dans ce cas, le moteur notifie à nouveau le ramasse-miettes avec ce numéro de page et il nettoiera les déchets plus tard (l’ancien ramasse-miettes “oubliera” cette page jusqu’à ce que l’utilisateur la relise).

Le ramasse-miettes coopératif et le ramasse-miettes en arrière-plan sont désormais tous deux possibles. Pour les gérer, un nouveau paramètre de configuration “GCPolicy” a été introduit. Il peut être défini sur :

  • a) cooperative - le ramasse-miettes est effectué uniquement en mode coopératif, comme avant IB6. Chaque requête utilisateur est responsable de la suppression des versions d’enregistrement inutilisées. C’est ainsi que le moteur fonctionnait avant IB6. C’est la seule option pour le mode Classic Server. Le moteur ne suit pas les versions produites par les instructions update et delete.

  • b) background - le ramasse-miettes est effectué uniquement par un thread en arrière-plan, comme dans IB6 et versions ultérieures. Aucune requête utilisateur ne supprime les versions d’enregistrement inutilisées. Au lieu de cela, la requête utilisateur notifie un thread dédié au ramasse-miettes avec le numéro de page où une version d’enregistrement inutilisée est détectée. Le moteur mémorise également les numéros de pages où l’instruction update\delete a créé des versions antérieures.

  • c) combined - le ramasse-miettes en arrière-plan et le ramasse-miettes coopératif sont tous deux effectués.

La valeur par défaut est “combined” pour SuperServer. ClassicServer ignore ce paramètre et fonctionne toujours en mode “cooperative”.