powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Старая песня о главном: распараллеливание рестора
25 сообщений из 58, страница 1 из 3
Старая песня о главном: распараллеливание рестора
    #38542231
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi

Ресторю продакшен (48 Гб) на тестовую тряпку, с достаточно мощным диском: это просто 3.14%@$@ц какой-то: шевелится еле-еле, загрузежно 2 ядра из 12 (одно - гбак, второе - движок):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
. . .
Wed Jan 29 14:56:2 3  2014: gbak:   15400000 records restored
Wed Jan 29 14:56:2 4  2014: gbak:   15410000 records restored
Wed Jan 29 14:56:25 2014: gbak:   15420000 records restored
Wed Jan 29 14:56:25 2014: gbak:   15430000 records restored
Wed Jan 29 14:56:2 6  2014: gbak:   15440000 records restored
Wed Jan 29 14:56:2 7  2014: gbak:   15450000 records restored
Wed Jan 29 14:56:27 2014: gbak:   15460000 records restored
Wed Jan 29 14:56:2 8  2014: gbak:   15470000 records restored
Wed Jan 29 14:56:2 9  2014: gbak:   15480000 records restored
Wed Jan 29 14:56:29 2014: gbak:   15490000 records restored
Wed Jan 29 14:56:3 0  2014: gbak:   15500000 records restored
. . .
Просмотр лога для простой базы с двумя таблицами, связанными по FK:
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> create table tm(id int, constraint tm_pk primary key(id) using index tm_pk_idx);
SQL> create table td(id int, pid int, constraint td_pk primary key(id) using index td_pk_idx, constraint td_fk foreign key(pid) references tm using index td_fk_idx);
SQL> create sequence g;
SQL> insert into tm select gen_id(g,1) from rdb$types rows 100;
SQL> insert into td select gen_id(g,1),1+rand()*99 from rdb$types rows 100;
SQL> commit;
- показывает, что:
1) сначала создаются таблицы-пустышки, а также генератор:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
gbak:opened file empty.fbk
gbak:transportable backup -- data in XDR format
gbak:		backup file is compressed
gbak:backup version is 10
gbak:created database empty2.fdb, page_size 8192 bytes
gbak:started transaction
gbak:restoring domain RDB$6
gbak:restoring domain RDB$7
gbak:restoring domain RDB$8
gbak:restoring table TM
gbak:    restoring column ID
gbak:restoring table TD
gbak:    restoring column ID
gbak:    restoring column PID
gbak:restoring generator G value: 200
gbak:committing metadata
2) Затем создаются оба индекса для дочерней таблицы (TD; не знаю, почему первой выбрана именно она - может, "по алфавиту идёт" ?):
Код: plaintext
1.
gbak:    restoring index TD_PK_IDX
gbak:    restoring index TD_FK_IDX
- но судя по дальнейшим мессагам, оба индекса тут же деактивируются.
3) Далее идёт заливка данных в дочернюю таблицу (при ПУСТОЙ родительской!):
Код: plaintext
1.
2.
gbak:restoring data for table TD
gbak:   100 records restored
4) Далее - создание индекса ПК для родительской (TM) и заливка её данных:
Код: plaintext
1.
2.
3.
gbak:    restoring index TM_PK_IDX
gbak:restoring data for table TM
gbak:   100 records restored
5) Затем идёт восстановление привилегий и только под занавес - пересоздание всех индексов (включая и те, что обеспечивают констрейнты):
Код: plaintext
1.
2.
3.
4.
5.
6.
gbak:creating indexes
gbak:    activating and creating deferred index TD_PK_IDX
gbak:    activating and creating deferred index TM_PK_IDX
gbak:    activating and creating deferred index TD_FK_IDX
gbak:committing metadata
gbak:fixing system generators
gbak:finishing, closing, and going home

Ну так вот, вопрос.
Распараллеливание процесса заливки строк gbak'ом, насколько я понимаю, на сегодня реализовать нельзя.

Но почему нельзя добавить ключик типа -t <TABLE_NAME>, по аналогии с gstat'ом, чтобы можно было запустить 10 гбаков с разными аргументами (именами таблиц) - и пущай каждый заливает свою таблицу (предварительно отрубив индексы, ес-сно) ?

Разумеется, база при этом должна быть предварительно отресторена с ключиком '-m', дабы в ней уже были созданы все необходимые объекты.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542238
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай.

разрешаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542252
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийсделай.

разрешаю.у мну мозга не хватит :'(
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542283
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Тогда можно подметать плац ломом сделать по-другому.
Восстановить бэкап только метаданных, а данные переливать своей программой из "псевдобэкапа" - копии БД. Возможно, эта программа называется "репликатор".
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542305
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидНо почему нельзя добавить ключик типа -t <TABLE_NAME>, по аналогии с gstat'ом, чтобы можно было запустить 10 гбаков с разными аргументами (именами таблиц) - и пущай каждый заливает свою таблицу (предварительно отрубив индексы, ес-сно) ?

Большая часть времени тратится не на заливку данных в таблицу а на построение индексов
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542312
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryТаблоид,

Тогда можно подметать плац ломом сделать по-другому.
Восстановить бэкап только метаданных, а данные переливать своей программой из "псевдобэкапа" - копии БД. Возможно, эта программа называется "репликатор".репликатор (ДСа) имеет некий встроенный язык для "неинтерактивных действий", но я его не изучал - не было времени, к сож-ю :(
У него в ReplManager'e есть режим "Синхронизация", не знаю - есть ли эквивалентная команда в этом встроенном языке, чтобы неинтерактивно запустить. Но по-любому:
1) надо иметь развёрнутую копию самой базы, а не её .fbk - а этого как раз и нет;
2) надо приобрести еще 10 лицензий, дабы запустить 10 инстансов (хотя может, это бред и одной хватит - ну так и её надо покупать (не мне, за других переживаю :)).
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542313
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисБольшая часть времени тратится не на заливку данных в таблицу а на построение индексовЭто если их много навешено. У мну и до них не дошло - тупит на самой заливке :-(
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542320
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидСимонов ДенисБольшая часть времени тратится не на заливку данных в таблицу а на построение индексовЭто если их много навешено. У мну и до них не дошло - тупит на самой заливке :-(
Дак попробуй как выше предложили, только вставку булками делай.

В третьем надеюсь не почикали? Вот бы гбак научился этим пользоваться.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542325
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидшевелится еле-еле, загрузежно 2 ядра из 12 (одно - гбак, второе - движок

так опять через TCP ресторим. Просто если это делать через сервисы (что быстрее), gbak почти не грузит ядро.

Код: plaintext
1.
Wed Jan 29 14:56:23 2014: gbak:   15400000 records restored
Wed Jan 29 14:56:24 2014: gbak:   15410000 records restored

10000 зап/сек не так уж и плохо
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542329
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryВозможно, эта программа называется "репликатор".
Нет, уж "репликатор" эта программа точно не называется. Скорее "Data Pump"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542346
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТаблоидшевелится еле-еле, загрузежно 2 ядра из 12 (одно - гбак, второе - движоктак опять через TCP ресторим. Просто если это делать через сервисы (что быстрее), gbak почти не грузит ядро.Да попробую, конечно, только революцiонных дифферентов там не будет. Процентов 30-50% даст, но не ускорит в разы. И ядра (10 из 12) так и будут дурака валять.
Симонов Денис
Код: plaintext
1.
Wed Jan 29 14:56:23 2014: gbak:   15400000 records restored
Wed Jan 29 14:56:24 2014: gbak:   15410000 records restored
10000 зап/сек не так уж и плохоНе, долго. Он же не делает при этом апдейта индексов, нету триггеров (они после ресторятся) и FW при этом OFF!
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542349
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanТаблоидпропущено...
Это если их много навешено. У мну и до них не дошло - тупит на самой заливке :-(
Дак попробуй как выше предложили, только вставку булками делай.

В третьем надеюсь не почикали? Вот бы гбак научился этим пользоваться.Что именно пробовать из "выше", какими bulk'ами и что там "не почикали" ? разверни, плз.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542356
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидядра (10 из 12) так и будут дурака валять
а почему они что-то должны делать, если вся нагрузка идет на диск?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542361
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидядра (10 из 12) так и будут дурака валять
а почему они что-то должны делать, если вся нагрузка идет на диск? Это - нагрузка ?
Код: plaintext
1.
2.
3.
Total DISK READ: 2.34 M/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
18995 be/4 root         2.34 M/s     0.00 B/s  0.00 %  0.00 % gbak -rep -v kmain. . .
19391 be/4 firebird    0.00 B/s     2.98 M/s   0.00 %  0.00 % fbserver
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542366
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iostat -x -d несколько раз:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
[root@oel64 16:29:33 fb30]$ iostat -x -m
Linux 2.6.39-400.17.1.el6uek.x86_64 (oel64)     01/29/2014      _x86_64_        (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          57.38    0.00   30.80    5.01    0.00    6.81

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.02    91.10   17.34  144.75     1.78     4.92    84.77    10.07   62.12   0.45   7.28
sdb               0.00     0.82    0.50    0.72     0.04     0.05   148.06     0.02   12.86   0.43   0.05

[root@oel64 16:29:51 fb30]$ iostat -x -m
Linux 2.6.39-400.17.1.el6uek.x86_64 (oel64)     01/29/2014      _x86_64_        (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          57.38    0.00   30.79    5.01    0.00    6.81

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.02    91.10   17.34  144.75     1.78     4.92    84.77    10.07   62.12   0.45   7.28
sdb               0.00     0.82    0.50    0.72     0.04     0.05   148.06     0.02   12.86   0.43   0.05

[root@oel64 16:29:53 fb30]$ iostat -x -m
Linux 2.6.39-400.17.1.el6uek.x86_64 (oel64)     01/29/2014      _x86_64_        (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          57.38    0.00   30.79    5.01    0.00    6.82

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.02    91.10   17.34  144.75     1.78     4.92    84.77    10.07   62.12   0.45   7.28
sdb               0.00     0.82    0.50    0.72     0.04     0.05   148.06     0.02   12.86   0.43   0.05
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542368
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

а они у тебя что, на одном диске ????

ставь SSD или ищи диск с двумя независимыми комплектами головок.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542369
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто копирование из папки FBK в папку FDB маленькими и большими блоками по скорости сильно отличается?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542374
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа они у тебя что, на одном диске ????не уводи в сторону (хотя второй диск - есть, я проверю попозжее и это тоже)
я спросил про возможность распараллеливания одной из самых частых операций. Эта идея в воздухе висит просто, недаром её в фб-девеле мусолили как-то.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542379
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochпросто копирование из папки FBK в папку FDB маленькими и большими блоками по скорости сильно отличается?файлы копируются со скоростью 162 мб/сек. ИМХО, это слегка побольше, чем 10 тыс записей в сек, не так ли ?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542385
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> show database;
. . .
PAGE_SIZE 8192
Forced Writes are OFF
. . .
SQL> create table ti(id int, f01 int, f02 int, s01 varchar(36), s02 varchar(36));
SQL> set stat on;
SQL> insert into ti select gen_id(g,1), rand()*10000, rand()*10000, uuid_to_char(gen_uuid()), uuid_to_char(gen_uuid()) 
CON> from rdb$types,rdb$types,rdb$types rows 1000000;
Current memory = 4603845528
Delta memory = 2885168
Max memory = 4604306488
Elapsed time= 24.41 sec
Cpu = 0.00 sec
Buffers = 524288
Reads = 0
Writes = 0
Fetches = 7904829
SQL> set stat off;
SQL> select 1000000/24.41 from rdb$database;

               DIVIDE
=====================
             40966.81
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542389
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидwadmanпропущено...

Дак попробуй как выше предложили, только вставку булками делай.

В третьем надеюсь не почикали? Вот бы гбак научился этим пользоваться.Что именно пробовать из "выше", какими bulk'ами и что там "не почикали" ? разверни, плз.
Дак 13572650
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542392
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид Это - нагрузка ?там же в йопсы все упирается, а не в суммарную скорость
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542396
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидне уводи в сторону (хотя второй диск - есть, я проверю попозжее и это тоже)

Это не в сторону: если ты на мелких и небуферизованных ( flush buffers ) операциях будешь головкам "butterfly test" устраивать, то 3+3 мб/сек, которые ты показал в 16:28 [15489197], это очень даже пристойно!

Таблоидфайлы копируются со скоростью 162 мб/сек
Большими блоками и при кэшировании в память сотнями мегабайт.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542399
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

не стыкуется. я понимаю, что разные таблицы ресторятся с разной скоростью, но у меня в тесте через сервисы рестор шел
чтение 6мб сек, запись 20мб сек (разные диски). При 100% загрузке одного ядра firebird-ом.

Кроме того, насколько мне известно, заливка в базу в одном потоке быстрее чем рестор не бывает. Т.е. gbak у нас самый шустрый, ибо работает максимально эффективным способом. При использовании IBX, не говоря про dbExpress и прочее будет оверхед, т.е. медленее.
Другое дело - заливка данных в несколько потоков. Кажется DS это тестировал, вообще. Нет? Кто-то тестировал и сюда результаты кидал.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542405
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanТаблоидпропущено...
Что именно пробовать из "выше", какими bulk'ами и что там "не почикали" ? разверни, плз.
Дак 13572650 Нелегальный он, булк этот. Да и вообще: как ты собираешься генерить-то такой скрипт ? Ведь для этого придется пройтись "верхнеуровневым" средством по таблице и ваять огроменный скрипт по её данным, так что ле ?
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Старая песня о главном: распараллеливание рестора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]