Recolector de basura de Firebird 2.0
El motor conoce cada versión de registro producida por sentencias update\delete y puede eliminarlas tan pronto como la transacción de instantánea más antigua (OST) lo permita. Esto elimina la necesidad de volver a leer páginas con estas versiones por solicitud del usuario (es decir, SELECT COUNT(*) FROM table) y evita la situación en la que estas versiones nunca se leen (por supuesto, el sweep siempre eliminaba todas las versiones de registro no utilizadas). Además, existe una alta probabilidad de que las páginas necesarias aún residan en la caché de búfer, por lo que se requiere menos E/S de disco adicional.
Entre la notificación al recolector de basura sobre una página con versiones no utilizadas y el momento en que el recolector de basura lea esta página, una nueva transacción puede actualizar el registro y el recolector de basura no puede limpiar este registro si el número de esa nueva transacción está por encima del OST o sigue activa. En este caso, el motor vuelve a notificar al recolector de basura con este número de página y este limpiará la basura en algún momento posterior (el recolector de basura anterior “olvidará” esta página hasta que el usuario la lea de nuevo).
Ahora son posibles tanto la recolección de basura cooperativa como la de fondo. Para gestionarlo, se introdujo el nuevo parámetro de configuración “GCPolicy”. Puede establecerse en:
-
a) cooperative - la recolección de basura se realiza solo en modo cooperativo, como antes de IB6. Cada solicitud de usuario es responsable de eliminar las versiones de registro no utilizadas. Así es como funciona el motor antes de IB6. Esta es la única opción para el modo Classic Server. El motor no rastrea versiones producidas como resultado de sentencias update y delete
-
b) background - la recolección de basura se realiza solo mediante un hilo de fondo, como en IB6 y versiones posteriores. Ninguna solicitud de usuario elimina versiones de registro no utilizadas. En su lugar, la solicitud del usuario notifica al hilo dedicado del recolector de basura con el número de página donde se detectó una versión de registro no utilizada. Además, el motor recuerda los números de página donde la sentencia update\delete creó versiones de respaldo.
-
c) combined - se realizan tanto la recolección de basura de fondo como la cooperativa.
El valor predeterminado es “combined” para SuperServer. ClassicServer ignora este parámetro y siempre funciona en modo “cooperative”.