Проблема: Не стартует сбока мусора или почему Sweep gap = 1

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Dinosauro
Сообщения: 7
Зарегистрирован: 24 окт 2005, 14:25

Проблема: Не стартует сбока мусора или почему Sweep gap = 1

Сообщение Dinosauro » 18 янв 2006, 13:59

Проблема в следующем:
Требуется чтобы автоматически стартовал сбор мусора т.е. когда Oldest snapshot - Oldest transaction > Sweep Interval (для FB 1.5), если я правильно понимаю. Периодически в одной транзакции происходит UPDATE 10000 записей. В следствии этого со временем накапливается много версии записей. Непонятно почему Oldest transaction "продвигается", хотя в статье http://www.ibase.ru/devinfo/summary.htm написано, что Oldest transaction двигается вперед "при успешной отработке автоматического или ручного (gfix -sweep) sweep"
Статистика из заголовочной страницы БД:

Database header page information:
Flags 0
Checksum 12345
Generation 522
Page size 4096
ODS version 10.1
Oldest transaction 518
Oldest active 519
Oldest snapshot 519
Next transaction 520
Bumped transaction 1
Sequence number 0
Next attachment ID 0
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Jan 17, 2006 17:32:51
Attributes force write

Variable header data:
Sweep interval: 20000
*END*

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 янв 2006, 14:22

. Непонятно почему Oldest transaction "продвигается", хотя в статье http://www.ibase.ru/devinfo/summary.htm написано, что Oldest transaction двигается вперед "при успешной отработке автоматического или ручного (gfix -sweep) sweep"
это если Oldest ЗАСТРЕВАЕТ, тогда помогает только sweep. А так номера транзакций двигаются (или остаются на месте) при старте каждой транзакции.

по поводу "накопления версий" - www.ibase.ru/devinfo/garbage.htm

Dinosauro
Сообщения: 7
Зарегистрирован: 24 окт 2005, 14:25

Сообщение Dinosauro » 18 янв 2006, 14:50

Спасибо за ответ, kdv.
Как я понял из статьи sweep может стартовать автоматически только если "в системе нет "больших" rollback и не бывает обрыва коннектов". Т.е. в описанном мною случае придется периодически запускать sweep вручную и другого выхода нет ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 янв 2006, 15:32

Как я понял из статьи sweep может стартовать автоматически
брр... свип может стартовать автоматически только если sweep interval больше нуля и OST-OIT станет больше sweep interval. В остальных случаях автоматически он стартовать "не может".

Из информации по транзакциям, которую ты привел, никоим образом не следует, что версий в БД много или мало. 500 транзакций - это само по себе НИЧТО (также может быть полной фигней и пара миллионов транзакций в сутки).
Но если в каждой такой транзакции делается update всей базы, при этом ДАННЫЕ НИКТО НЕ ЧИТАЕТ, и это superserver, то разумеется, мусорные версии просто некому собирать (а фоновый сборщик мусора не успевает).

В статье (которая кстати, находится также в хелпе к IBAnalyst) все это описано.
И там же, в хелпе, есть еще статья по поводу того как и когда надо мониторить статистику.
Если хочешь, присылай на support (в zip) пару-тройку файлов ПОЛНОЙ статистики (с версиями), собранной с интервалом в час.

Ответить