gbak и oldest transaction в Firebird 2.5

AlexVin
Дата: 08.08.2012 08:28:28
равнозначны ли gbak без ключа -g и gfix -sweep или нет?
каждую ночь делается бэкап, но значение oldest transaction не меняется
sweep интервал стоит 0
получается, что gfix -sweep тоже надо запускать независимо от бэкапирования?
Таблоид
Дата: 08.08.2012 09:13:05
AlexVin
равнозначны ли gbak без ключа -g и gfix -sweep или нет?
каждую ночь делается бэкап, но значение oldest transaction не меняется
sweep интервал стоит 0
получается, что gfix -sweep тоже надо запускать независимо от бэкапирования?
gbak без ключа '-g' разрешает движку собирать мусор в базе, пока этот самый бекап делается. Например, если ваш бекап идёт 30 минут и за это время какой-нибудь коннект выполнит select count(*) from <некая_таблица_с_мусором>, то при отсутствии ключика '-g' коннект сей начнёт собирать мусор (см. кооп. сборка мусора). Но коннект этот мог и не обращаться к "некой_таблице_с_мусором" и тогда мусор так и остался бы неубранным. Сам gbak мусор в .fdb НЕ собирает, но в .fbk этот мусор никогда не пишется.
gfix -sweep - это когда вы сами стартуете сборку мусора.

То, что при gfix -sweep не меняется значение OIT, означает:
1) наличие активной транзакции, которая висит много дней. Используйте mon$-таблицы, чтобы определить адрес соотв-щей машины.
2) наличие limbo-транзакции (может изредка возникать при онлайн-репликации, если один из серваков накрывается при коммите). Лимбо-транзакцию нельзя увидеть по gstat -h, только по show database в isql.
AlexVin
Дата: 08.08.2012 09:48:46
получается правильнее в ночном окошке сначала gfix-sweep запускать, потом gbak-g, или Gbak-у порядок пофиг?
Микросекунда
Дата: 08.08.2012 10:24:04
AlexVin пишет:

> получается правильнее в ночном окошке сначала gfix-sweep запускать, потом
> gbak-g, или Gbak-у порядок пофиг?

Я бы гбак сначала запускал, чтобы по-быстрому получить резервную копию, а уж потом свип.

Posted via ActualForum NNTP Server 1.5

kdv
Дата: 08.08.2012 10:38:59
http://www.ibase.ru/devinfo/gbak.htm
еще
http://www.ibase.ru/devinfo/sweep.htm
http://www.ibase.ru/devinfo/garbage.htm

и т.д.

p.s. Микросекунда - да, сначала gbak -g, потом sweep, если sweep вообще нужен.
hvlad
Дата: 08.08.2012 10:39:04
Таблоид
Лимбо-транзакцию нельзя увидеть по gstat -h, только по show database в isql.
gfix -list
Dimitry Sibiryakov
Дата: 08.08.2012 10:43:16

AlexVin
получается правильнее в ночном окошке сначала gfix-sweep запускать, потом
gbak-g, или Gbak-у порядок пофиг?

Правильнее - сначала заставлять новоиспечённого DBA прочитать весь
http://ibase.ru/develop.htm до полного понимания, а только потом пускать его к живой БД.

Posted via ActualForum NNTP Server 1.5

Таблоид
Дата: 08.08.2012 11:56:33
hvlad
Таблоид
Лимбо-транзакцию нельзя увидеть по gstat -h, только по show database в isql.
gfix -list
а, точно!.. опять я забыл про этот волшебный ключик...
А почему нельзя в gstat -h добавить сиё ? Чтобы всё видеть одной командой.
AlexVin
Дата: 08.08.2012 12:45:09
Таблоид
если ваш бекап идёт 30 минут и за это время какой-нибудь коннект выполнит select count(*) from <некая_таблица_с_мусором>, то при отсутствии ключика '-g' коннект сей начнёт собирать мусор

что за хрень? а при наличии ключика gbak ПОМЕШАЕТ что ли другому коннекту собрать мусор??

я понимаю следующие слова:

-g
Самый важный параметр. Часто встречается его описание как "отключает сборку мусора", но если подробнее, то этот параметр запрещает серверу проверять читаемые записи на наличие мусорных, что ускоряет процесс бэкапа.

gbak является обычной программой, как и любые другие, которые можете написать и вы. Она подсоединяется к базе данных, стартует транзакцию snapshot и затем вычитывает все данные в БД сохраняя их в файл резервной копии. То есть, фактически gbak -b без ключа -g будет вызывать срабатывание кооперативной сборки мусора (опять же, см. начало статьи), причем для всех данных, т.к. будут прочитаны все данные всех таблиц.


таким образом:
процесс gbak без ключа, читая каждую строку каждой таблицы, вызывает подчистку версий этих строк, а никакие не а в "это время какой-нибудь коннект"

должен бы вызывать - судя по "документации"...
а на деле?
Таблоид
Дата: 08.08.2012 13:14:57
AlexVin,

есть еще и официозная дока.
И в ней - вот:
автор
# -G[ARBAGE_COLLECT]

The use of this switch prevents Firebird's garbage collection from taking place while gbak is running.
Normally gbak connects to the database as any other connection would and garbage collection runs normally.
Using this switch prevents garbage collection from running during the course of the backup.