SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Предел кол-ва транзакций для БД
Предел кол-ва транзакций для БД [сообщение #4915] Wed, 17 April 2024 17:31 Переход к следующему сообщению
H.e.l.p в настоящее время не в онлайне  H.e.l.p
Сообщений: 9
Зарегистрирован: July 2022
Junior Member
Привет всем!

FB 2.5.9, Classic, dialect 1

       Oldest transaction      2096672242
       Oldest active           2098476520
       Oldest snapshot         2098460621
       Next transaction        2098814732

Прирост транзакций примерно 1,2 - 1,5 млн. в день.

Наткнулся на комментарий kdv из форума "кстати, заранее предупреждаю. с такой интенсивностью транзакций, если еще и будет расти, через 1.5-2 года база остановится, и ей надо будет делать срочно перевод в readonly, потом бэкап-рестор."

Правильно я понимаю, что у меня этот срок наступит через месяц? Или это уже не актуально?

[Обновления: Wed, 17 April 2024 18:32]

Известить модератора

Re: Предел кол-ва транзакций для БД [сообщение #4916 является ответом на сообщение #4915] Wed, 17 April 2024 19:09 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 358
Зарегистрирован: August 2022
Senior Member
Для 2.5 - актуально
Re: Предел кол-ва транзакций для БД [сообщение #4918 является ответом на сообщение #4916] Wed, 17 April 2024 20:21 Переход к предыдущему сообщениюПереход к следующему сообщению
H.e.l.p в настоящее время не в онлайне  H.e.l.p
Сообщений: 9
Зарегистрирован: July 2022
Junior Member
Влад, спасибо!

Что можно придумать для БД размером 1,8Т, бекап/рестор идет двое суток, такой простой просто не допустим.
Re: Предел кол-ва транзакций для БД [сообщение #4919 является ответом на сообщение #4918] Wed, 17 April 2024 20:36 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Миграцию на 3, 4, 5 не рассматриваете? В пятерке есть параллелизм для бекап/рестор.
Re: Предел кол-ва транзакций для БД [сообщение #4920 является ответом на сообщение #4919] Wed, 17 April 2024 20:50 Переход к предыдущему сообщениюПереход к следующему сообщению
H.e.l.p в настоящее время не в онлайне  H.e.l.p
Сообщений: 9
Зарегистрирован: July 2022
Junior Member
Нет, ПО не наше, вендер остановился в развитии своего на этой версии. Его следующие - переезд на oracle. Ну и к миграции надо готовиться, только времени уже нет

[Обновления: Wed, 17 April 2024 20:51]

Известить модератора

Re: Предел кол-ва транзакций для БД [сообщение #4921 является ответом на сообщение #4918] Wed, 17 April 2024 21:32 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 358
Зарегистрирован: August 2022
Senior Member
H.e.l.p писал(а) Wed, 17 April 2024 20:21
Влад, спасибо!

Что можно придумать для БД размером 1,8Т, бекап/рестор идет двое суток, такой простой просто не допустим.
Без рестора счётчик тр-ций не сбросить никак.

PS Параллельный бекап и рестор есть в HQBird 2.5
Re: Предел кол-ва транзакций для БД [сообщение #4922 является ответом на сообщение #4918] Thu, 18 April 2024 00:38 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 411
Зарегистрирован: August 2022
Senior Member
H.e.l.p писал(а) Wed, 17 April 2024 19:21
Что можно придумать для БД размером 1,8Т, бекап/рестор идет двое суток, такой простой просто не допустим.
Двухсторонняя логическая репликация на второй сервер. Пока одна база бэкап-ресторится - пользователи работают со второй.
Re: Предел кол-ва транзакций для БД [сообщение #4924 является ответом на сообщение #4918] Thu, 18 April 2024 09:57 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 162
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
H.e.l.p писал(а) Thu, 18 April 2024 01:21
Что можно придумать для БД размером 1,8Т, бекап/рестор идет двое суток, такой простой просто не допустим.
У вас, как бы, два варианта:
1. Организовать запланированный простой минимальной длительности;
2. Аварийно встать "когда случится".

P.S.
Про HQbird уже упомянули. Ускорит (финальный) этап построения индексов.
Добавлю про потоковый бэкап-рестор (минимизация времени и диска на передачу данных из "старой" базы в "новую".
Если ПО может работать с базой "только чтение", то можно выполнить всё тот же потоковый бэкап-рестор из RO-базы с последующим быстрым переключением.
Совсем экзотический вариант - выполнить передачу данных (gbak -i) и "распараллелить" построение индексов разных таблиц специально подготовленным скриптом. Но проще - использовать HQbird: он распараллелит построение индексов в рамках отдельной таблицы. Что заметно ускорит построение индексов на больших и очень больших таблицах при не самых отстойных дисках.

[Обновления: Thu, 18 April 2024 09:58]

Известить модератора

Re: Предел кол-ва транзакций для БД [сообщение #4925 является ответом на сообщение #4924] Thu, 18 April 2024 11:18 Переход к предыдущему сообщениюПереход к следующему сообщению
H.e.l.p в настоящее время не в онлайне  H.e.l.p
Сообщений: 9
Зарегистрирован: July 2022
Junior Member
Спасибо!

Два вопроса - потоковый бекап/рестор позволяет начинать рестор не дожидаясь окончания бекапа? Где можно почерпнуть информацию как это правильно настраивается?

Второй "HQbird уже упомянули. Ускорит (финальный) этап построения индексов" - а сам бекап не ускорит?
Re: Предел кол-ва транзакций для БД [сообщение #4927 является ответом на сообщение #4925] Thu, 18 April 2024 12:02 Переход к предыдущему сообщениюПереход к следующему сообщению
neozx1984 в настоящее время не в онлайне  neozx1984
Сообщений: 27
Зарегистрирован: June 2022
Junior Member
Для Linux:
1) Запускаем сессию screen.
2) В первой сессии screen выполняем команду
gbak -v -y backup.log -g -b database stdout | lzop -1 -o database.gbk.lzo
эта команда запускает бекап базы database, поток параллельно сжимается утилитой lzop в файл database.gbk.lzo. Файл можно сохранять на медленный HDD-диск.
3) Во второй сессии screen не дожидаясь завершения бекапа выполняем команду
tail -c+0 -f database.gbk.lzo | lzop -dc | gbak -v -y restore.log -o -i -r stdin database-br
данная команда не завершится. Нужно смотреть когда завершиться рестор по файлу restore.log и после завершения прервать выполнения команды - Ctrl-C.
4) Активируем индексы утилитой plume в несколько потоков
plume -u sysdba -p masterkey -t N -d localhost:ncore-fssp
, где N-количество потоков.

P.S. По пункту 4 могут быть разные нюансы. Если есть очень большие индексы возможно их лучше восстанавливать в один поток, т.к. большие файлы сортировки сожрут всю память(если временные файлы на tmpfs) или диск.
P.P.S. plume - распараллеливает построение индексов, потребление памяти в этом случае растет.
P.P.P.S. Так же необходимо провести тестовый рестор, т.к. возможны сюрпризы с null в не null полях и другие фокусы с метаданными.

[Обновления: Sat, 22 June 2024 23:18] от Модератора

Известить модератора

Re: Предел кол-ва транзакций для БД [сообщение #4928 является ответом на сообщение #4927] Thu, 18 April 2024 14:31 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 411
Зарегистрирован: August 2022
Senior Member
При размере в два террабайта это в любом случае будет слишком долго. Только standby способен дать технологическое окно в районе нуля.
Re: Предел кол-ва транзакций для БД [сообщение #4931 является ответом на сообщение #4928] Thu, 18 April 2024 16:44 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время в онлайне  shavluk
Сообщений: 82
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Как по мне, репликация единственный реальный путь успеть ко времени.
Но при 1.5М транзакций в сутки, репликация тоже не самый простой путь.
В любом случае надо сделать тестовый рестор базы, иначе можно попасть
Re: Предел кол-ва транзакций для БД [сообщение #4932 является ответом на сообщение #4931] Thu, 18 April 2024 18:02 Переход к предыдущему сообщениюПереход к следующему сообщению
shalamyansky в настоящее время не в онлайне  shalamyansky
Сообщений: 150
Зарегистрирован: August 2022
Senior Member
Может, инкрементным бэкапом? Первый чанк большой будет, из него восстанавливаться долго, но потом догоняться малыми разницами. Когда совсем малыми станут, быстренько догнать остатки, и переключить на новую базу.
Re: Предел кол-ва транзакций для БД [сообщение #4933 является ответом на сообщение #4932] Thu, 18 April 2024 19:15 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Инкрементный бекап с последующим рестором не сбросит счетчики транзакций, ибо по сути это копирование на страничном уровне
Re: Предел кол-ва транзакций для БД [сообщение #4934 является ответом на сообщение #4931] Fri, 19 April 2024 00:42 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 411
Зарегистрирован: August 2022
Senior Member
shavluk писал(а) Thu, 18 April 2024 15:44

Но при 1.5М транзакций в сутки, репликация тоже не самый простой путь.
Вангую, что там 99% транзакций - read-only по факту. Довольно трудно найти вменяемый источник такого потока данных. Разве что все чеки перетёрочки собирают или ММВБ, но такие люди по форумам не ходят...
Re: Предел кол-ва транзакций для БД [сообщение #4935 является ответом на сообщение #4925] Fri, 19 April 2024 09:57 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 162
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
H.e.l.p писал(а) Thu, 18 April 2024 16:18
Два вопроса
Вопросов, на самом деле, три, поэтому отвечаю не по порядку.
Многопоточный бэкап параллельно вычитывает данные из разных мест одной таблицы. Потоки, естественно, ничего не пропускают по общему итогу и не конкурируют друг с другом "внутри" базы.
Многопоточный рестор ускоряет только восстановление индексов, точно также вычитывая данные для сортировки в несколько потоков.
Данные, которые читаются из бэкапа, вставляются в (очередную) таблицу в один поток. На этом этапе просто нечего параллелить.

"Потоковый бэкап-рестор" это вполне себе общеизвестная концепция "труба-конвейер" (pipe) и организовывается он как и любой другой конвейер: процесс1 | процесс2
Или даже: процесс1 | ... | процессN

Следует чётко разграничивать регулярные и разовые задачи.
Ежедневный бэкап (с восстановлением, как минимум, метаданных) - задача регулярная. Время бэкап важно, но не критично.
"Перебэкап" базы для сброса значений счётчиков транзакции, в обозримой перспективе - задача разовая.

Для разовой задачи критичным является общее время. Не просто важно, а именно, что критично - есть всего одна попытка и минимум времени: amat victoria curam.
В данном случае, теоретический возможный минимум - время восстановления "новой" базы, поэтому doc/README.services_extension.txt и ("сложено"):
"bin/gbak" -se service_mgr ... -b -g база stdout 2>full.bkp.err |
"bin/gbak" -se service_mgr ... -c -use_ stdin новая-база 2>full.rst.err
В таком варианте, при бэкапе, нельзя указывавать опции -v и -y.
При восстановлении обязательно указываются -v, -y и -st, чтобы в протоколе было видно сколько времени заняли этапы восстановления.
Процесс всегда начинается с бэкапа-восстановления только метаданных:
gbak -se ... -m -b -g база stdout | gbak -se ... -m -c stdin мета-база
Если Firebird 64-разрядный, то при "монопольном" доступе к "старой" базе задираем TempCacheLimit до (практического) максимума в 2047МБ.
Для 32-разрядного - до гигабайта-гигабайта с четвертью. Может быть и до полутора гигабайт, но это уже надо смотреть отдельно и будет зависеть от разрядности операционки.
Большой TCL, в любом случае, несколько (или даже существенно) ускорит построение индексов при восстановлении базы.
Разрядность посмотреть "в сведениях о реализации":
"bin/fbsvcmgr" service_mgr ... info_implementation -z
Пример вывода "ввинде":
Firebird services manager version WI-V2.5.9.27152 Firebird 2.5
Server implementation: Firebird/x86-64/Windows NT

Firebird services manager version WI-V2.5.9.27139 Firebird 2.5
Server implementation: Firebird/x86/Windows NT
Ещё полезно восстанавливать базу "без резерва" (опция -use_), что "подпакует" записи и уменьшит размер "новой" базы. После успешного восстановления в таком режиме обязательно делается gfix -use reserve для новой базы (doc/README.DiskSpaceAllocation).

Диск, на который будет восстанавливаться новая база, должен быть быстрым. Если быстрый диск только один и он занят "старой" базой, то будет чуть сложнее и займёт больше времени.
Re: Предел кол-ва транзакций для БД [сообщение #4936 является ответом на сообщение #4935] Fri, 19 April 2024 14:41 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 411
Зарегистрирован: August 2022
Senior Member
Цитата:
Ещё полезно восстанавливать базу "без резерва" (опция -use_), что "подпакует" записи и уменьшит размер "новой" базы. После успешного восстановления в таком режиме обязательно делается gfix -use reserve для новой базы (doc/README.DiskSpaceAllocation).
Твоя фамилия Остер? Первый же update фрагментирует "упакованные" таким образом записи и уронит производительность вдвое.

Прямо сейчас я просто копирую 1,6 террабайта с винта. Процесс обещает идти более трёх часов. Это в любом случае неприемлемо для сколь-либо важной и нагруженной базы.
Re: Предел кол-ва транзакций для БД [сообщение #4937 является ответом на сообщение #4936] Fri, 19 April 2024 15:06 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 162
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
SD писал(а) Fri, 19 April 2024 19:41
Первый же update фрагментирует "упакованные" таким образом записи и уронит производительность вдвое.
Меня опять терзают смутные сомнения, что процент "активных" данных в не-OLTP базе не просто меньше ста, но ещё и уменьшается с каждым годом.

P.S.
Вас послушать, так каждый update удвоит время выполнения запроса.
Re: Предел кол-ва транзакций для БД [сообщение #4953 является ответом на сообщение #4918] Tue, 23 April 2024 19:21 Переход к предыдущему сообщениюПереход к следующему сообщению
Умный Прапор в настоящее время не в онлайне  Умный Прапор
Сообщений: 19
Зарегистрирован: April 2024
Junior Member
H.e.l.p писал(а) Wed, 17 April 2024 20:21
Что можно придумать для БД размером 1,8Т, бекап/рестор идет двое суток, такой простой просто не допустим.
Даже представить сложно, что же такое в БД лежит... Файлы что ли?
Re: Предел кол-ва транзакций для БД [сообщение #4986 является ответом на сообщение #4953] Sun, 28 April 2024 01:12 Переход к предыдущему сообщению
H.e.l.p в настоящее время не в онлайне  H.e.l.p
Сообщений: 9
Зарегистрирован: July 2022
Junior Member
Привет!

Еще раз спасибо всем за советы!

По плану:
1. Запланировали простой работы в 48 часов (с запасом) для пишущих сервисов (кроме критичных). Для читающих - без ограничений.
2. На новом сервере развернули триальный HQBird.
3. С помощью nbackup залочили БД, скопировали на новый сервер (1 час 40 мин, 1.4Т)
4. Остановили сервер БД. Скопировали дельту (4.5Г). Запустили сервер, разлочили БД и подняли сервисы. Простой 30 мин.
5. Запустили бекап в HQBird, 12 потоков - 1 час 50 минут
6. Запустили рестор в HQBird, 12 потоков - чистое время 12 часов 52 минуты.
  Через два часа работы служба аварийно остановилась и рестор пришлось перезапускать (The Firebird Server - HQBirdInstanceFB2 service terminated unexpectedly.  It has done this 1 time(s).  The following corrective action will be taken in 0 milliseconds: Restart the service.) Почему так произошло хз, в журналах ничего подозрительного не обнаружилось. На предварительных тестах все было нормально, как в боевом прогоне - так подлянка ))
7. Остановили сервисы, поменяли алиас на старой базе, что бы больше никто не вносил изменений. Скопировали дельту по критичным таблицам (скриптами), выровняли значения всех генераторов. Простой 1 час.
8. Зарезолвили путь к продной БД на новый IP, запустили все сервисы.

Итого: БД была полностью недоступна для сервисов 1 час 30 минут. Простой пишущих сервисов 17 часов.

[Обновления: Sun, 28 April 2024 01:17]

Известить модератора

Предыдущая тема: FB4.0 после установки сервис не стартует
Следующая тема: Скопированный файл базы из Линукса в Windows
Переход к форуму:
  


Текущее время: Sat Nov 23 13:10:29 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01675 секунд