Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Сборщик мусора Firebird 2.0

Движок знает о каждой версии записи, созданной операторами update\delete, и может удалять их, как только старейшая снапшотная транзакция (OST) это позволит. Это устраняет необходимость повторного чтения страниц с этими версиями по запросу пользователя (например, SELECT COUNT(*) FROM table) и позволяет избежать ситуации, когда эти версии никогда не читаются (конечно, sweep всегда удалял все неиспользуемые версии записей). Также существует высокая вероятность, что нужные страницы всё ещё находятся в буферном кэше, поэтому требуется меньше дополнительных операций ввода-вывода на диск.

Между уведомлением сборщика мусора о странице с неиспользуемыми версиями и моментом, когда сборщик мусора прочитает эту страницу, новая транзакция может обновить запись, и сборщик мусора не сможет очистить эту запись, если номер новой транзакции выше OST или она всё ещё активна. В этом случае движок снова уведомляет сборщик мусора с номером этой страницы, и он очистит мусор позже (старый сборщик мусора «забудет» об этой странице, пока пользователь не прочитает её снова).

Теперь возможны как кооперативная, так и фоновая сборка мусора. Для управления этим был введён новый параметр конфигурации «GCPolicy». Он может принимать следующие значения:

  • a) cooperative - сборка мусора выполняется только в кооперативном режиме, как до IB6. Каждый пользовательский запрос отвечает за удаление неиспользуемых версий записей. Так движок работал до IB6. Это единственный вариант для режима Classic Server. Движок не отслеживает версии, созданные в результате операторов update и delete.

  • b) background - сборка мусора выполняется только фоновым потоком, как в IB6 и более поздних версиях. Никакие пользовательские запросы не удаляют неиспользуемые версии записей. Вместо этого пользовательский запрос уведомляет выделенный поток сборщика мусора с номером страницы, где обнаружена неиспользуемая версия записи. Также движок запоминает номера страниц, где оператор update\delete создал back-версии.

  • c) combined - выполняются как фоновая, так и кооперативная сборка мусора.

По умолчанию используется «combined» для SuperServer. ClassicServer игнорирует этот параметр и всегда работает в режиме «cooperative».