powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Старая песня о главном: распараллеливание рестора
58 сообщений из 58, показаны все 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
Старая песня о главном: распараллеливание рестора
    #38542416
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochесли ты на мелких и небуферизованных ( flush buffers ) операциях будешь головкам "butterfly test" устраивать, то 3+3 мб/сек, которые ты показал в 16:28 [15489197], это очень даже пристойно!откудова может быть "butterfly test" при ресторе ? и с чего ты взял, что там небуферизованная запись идёт ?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542427
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvДругое дело - заливка данных в несколько потоковт.е. создать базу-1 с 10 таблицами одинаковой структуры, по 1 млн записей в каждой, а затем создать через backup и restore -m её "пустой аналог" и попробовать два варианта:
1) одновременно запускаемые 10 isql-окон, каждое коннектится к базе-источнику через ES EDS и льёт в "свою" таблицу из 10 имеющихся;
2) одно окно, делает то же самое, что все 10 в пункте "1)", но последовательно.

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

...а я спросил. А почему бы нет? резкое падение скорости hdd в такую схему укладывается хорошо. Мало ли какой у тебя на сервере планировщих IO, какая FS, что делает сервер...
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542439
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидсоздать базу-1 с 10 таблицами одинаковой структуры, по 1 млн записей в каждой, а затем создать через backup и restore -m её "пустой аналог" и попробовать два варианта

я имел в виду просто создать базу, и в 10 таблиц лить данные 10-ю isql. Да, это самый примитивный вариант теста.
Но через ES EDS (? what is EDS?) будет тормознее, причем не очень понятно, что тут сравнивать.

я бы написал 10 однотипных процедур, вливающих случайные данные в 10 таблиц. Это уже ближе к теме для проверки именно распараллеливаемости вставки.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542441
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидоткудова может быть "butterfly test" при ресторе ? и с чего ты взял, что там небуферизованная запись идёт ?попробуй ресторить на рам-диск (хотя бы начать, если все данные не уберутся) ну или на какой-нить Samsung 840 Pro - увидишь и 100% загрузку ядра, и другие цифры в статистике IO. а "откуда" - какая разница, если исправить никак не сможешь?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542450
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00ch,

тут еще хитрее, у меня дома копирование с винчестера на винчестер шло со скоростью не больше 10 мб/с

оказалось китайский SATA-контроллер (SilImg) был с RAID-прошивкой на непрощиваемой микросхеме, давно на это наплевали и забыли. Но... именно, когда он использовался в режиме с одного отдельного диска на другой, он не столько копировал, сколько переключался между дисками.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542451
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochрезкое падение скорости hdd в такую схему укладывается хорошо.т.е. ты предполагаешь (или утверждаешь ?), что при ресторе происходит такое огромное число "дёрганий бошек", что он, болезный, добавляет только по 10-15 тыс записей в сек ? А как насчет этого ? (40 тыс записей в сек вместо 10 тыс, обычный insert).

AriochМало ли какой у тебя на сервере планировщих IO, какая FS, что делает сервер...Не знаю, какой там планировщик IO - наверное, "типичный".
По файловой системе инфа вот:
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
[root@oel64 16:41:22 fb30]$ dumpe2fs -h /dev/sda4
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2f765571-eba5-47f7-96cb-82d85e8f9a19
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              16179200
Block count:              64702976
Reserved block count:     3235148
Free blocks:              15054885
Free inodes:              15900617
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1008
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              1
Flex block group size:    16
Filesystem created:       Thu Oct 10 16:55:40 2013
Last mount time:          Fri Jan 24 20:39:17 2014
Last write time:          Thu Oct 10 17:38:39 2013
Mount count:              19
Maximum mount count:      -1
Last checked:             Thu Oct 10 16:55:40 2013
Check interval:           0 (<none>)
Lifetime writes:          18 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      29f429c6-2696-4114-bb1a-582825917b8a
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             128M
Journal length:           32768
Journal sequence:         0x0017172d
Journal start:            30721
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542456
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvwhat is EDSon external data source

kdvя бы написал 10 однотипных процедур, вливающих случайные данные в 10 таблиц. Это уже ближе к теме для проверки именно распараллеливаемости вставки.попробую как-нить.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542469
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разные таблицы на ресторе показывают разный i/o, это однозначно.
Это я к тому, что если ты померял скорость вставки на одной таблице, а скорость рестора - на другой, то будут разные результаты.

ТаблоидНе знаю, какой там планировщик IO - наверное, "типичный".
даже я знаю что есть планировщик cfq, есть as, есть deadline, и еще какие то. И они реально по разному работают.
Например
http://www.phoronix.com/scan.php?page=article&item=linux_iosched_2012&num=4
Threaded IO для hdd вроде разница между планировщиками не сильная, для SSD ощутимая,
и куда выше разница между hdd и ssd (в сравнении с IOZone write performance выше).
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542478
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидА как насчет этого ? (40 тыс записей в сек вместо 10 тыс, обычный insert).

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

Код: sql
1.
2.
insert into ti select gen_id(g,1), rand()*10000, rand()*10000, uuid_to_char(gen_uuid()), uuid_to_char(gen_uuid()) 
from rdb$types,rdb$types,rdb$types rows 1000000;



Это не тоже самое что
Код: sql
1.
2.
insert into ti
values(?, ?, ?, ?, ?)



и потом подставляем туда по одной строке.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542505
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochсплошная запись в один файл вместо чтения и записи двух разных файлов вперемешкуНет, не так. ЧТЕНИЕ (см. insert into ... select from ... ) тоже есть.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542509
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТаблоид,

Код: sql
1.
2.
insert into ti select gen_id(g,1), rand()*10000, rand()*10000, uuid_to_char(gen_uuid()), uuid_to_char(gen_uuid()) 
from rdb$types,rdb$types,rdb$types rows 1000000;




Это не тоже самое что
Код: sql
1.
2.
insert into ti
values(?, ?, ?, ?, ?)




и потом подставляем туда по одной строке.естес-сно! это тяжелее , чем подставлять по одной строке литералы.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542534
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

не факт.

В первом случае ничего кроме движка не работает. К тому же rdb$types попадает в кэш пусть даже и при вставке он будет постоянно вытесняться, но всё равно объём чтений с диска должен быть ниже.

Во втором (если используется TCP) есть дополнительное взаимодействие через клиента. Вот когда рестор идёт через сервисы уже ближе.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542540
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, экперимент покажет. Вот дождусь окончания этого долбаного рестора - ужо держитесь тогда! :-)
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542841
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТаблоидсоздать базу-1 с 10 таблицами одинаковой структуры, по 1 млн записей в каждой, а затем создать через backup и restore -m её "пустой аналог" и попробовать два вариантая имел в виду просто создать базу, и в 10 таблиц лить данные 10-ю isql. Замер показал: параллельный инсерт по 1 млн строк в 10 таблиц *быстрее*, чем одиночный инсерт 10 млн строк в 1 таблицу.
DDL (пустая новая база, FW = OFF):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table t01(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t02(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t03(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t04(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t05(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t06(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t07(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t08(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t09(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));
create table t10(id int, x int, y int, z int, u varchar(20), v varchar(20), w varchar(20));

Батник для генерации 10 .sql-скриптов, каждый из которых вставляет по 1 млн записей в "свою" таблицу (t01 ... t10):
perfins_parall.bat
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
@echo off
setlocal enabledelayedexpansion enableextensions
set lp=(
set rp=)
if .%1.==.. set /a n=10
for /l %%x in (1, 1, %n%) do (
  set /a c=100+%%x
  set sql=tmpins!c:~1,2!.tmp
  echo !sql!
  del !sql! 2>nul
  echo show version;                 >>!sql!
  echo show database;                >>!sql!
  echo set stat on;     >>!sql! 
  echo -- set list on; select * from mon$database; set list off;  >>!sql!
  echo set echo on;                  >>!sql!
  echo set term ^^;                  >>!sql!
  echo execute block as              >>!sql! 
  echo   declare n int = 1000000;    >>!sql!
  echo begin                         >>!sql!
  echo   while (n^>0!rp! do              >>!sql!
  echo     insert into t!c:~1,2!(id,x,y,z, u,v,w!rp!   >>!sql!
  echo     values ( rand(!rp!*10000, rand(!rp!*10000, rand(!rp!*10000, rand(!rp!*10000, >>!sql!
  echo              rpad('', 20, 'qwerty'!rp!,   >>!sql!
  echo              rpad('', 20, 'asdfgh'!rp!,   >>!sql!
  echo              rpad('', 20, 'zxcvbn'!rp!    >>!sql!
  echo            !rp!                           >>!sql!
  echo     returning :n-1 into n;             >>!sql!
  echo end^^                          >>!sql!
  echo set term ;^^                   >>!sql!
  echo commit;                       >>!sql!
  echo set echo off;                 >>!sql!
  echo set stat off;                 >>!sql!
  echo -- select count(*!rp! result_count from t01;   >>!sql!

)

for /l %%x in (1, 1, %n%) do (
  set /a c=100+%%x
  set sql=tmpins!c:~1,2!.tmp
  set log=tmpins!c:~1,2!.log
  
  @echo on
  start perfins_aux.bat 192.168.0.220/3333:/var/db/fb30/perfins.fdb !sql! !log!
  @echo off
)
exit
(при запуске без аргументов запускает одновременно 10 isql'ей командой START, каждому скармливается скрипт на вставку в "свою" таблицу 1 млн строк; статистика логируется каждым скриптом в "своём" логе)

Батник, генерящий 1 скрипт со вставкой 10 млн строк в одну таблицу:
perfins_single.bat
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
@echo off
setlocal enabledelayedexpansion enableextensions
set lp=(
set rp=)
if .%1.==.. set /a n=1
for /l %%x in (1, 1, %n%) do (
  set /a c=100+%%x
  set sql=tmpins!c:~1,2!.tmp
  echo !sql!
  del !sql! 2>nul
  echo show version;                 >>!sql!
  echo show database;                >>!sql!
  echo set stat on;     >>!sql! 
  echo -- set list on; select * from mon$database; set list off;  >>!sql!
  echo set echo on;                  >>!sql!
  echo set term ^^;                  >>!sql!
  echo execute block as              >>!sql! 
  echo   declare n int = 10000000;    >>!sql!
  echo begin                         >>!sql!
  echo   while (n^>0!rp! do              >>!sql!
  echo     insert into t!c:~1,2!(id,x,y,z, u,v,w!rp!   >>!sql!
  echo     values ( rand(!rp!*10000, rand(!rp!*10000, rand(!rp!*10000, rand(!rp!*10000, >>!sql!
  echo              rpad('', 20, 'qwerty'!rp!,   >>!sql!
  echo              rpad('', 20, 'asdfgh'!rp!,   >>!sql!
  echo              rpad('', 20, 'zxcvbn'!rp!    >>!sql!
  echo            !rp!                           >>!sql!
  echo     returning :n-1 into n;             >>!sql!
  echo end^^                          >>!sql!
  echo set term ;^^                   >>!sql!
  echo commit;                       >>!sql!
  echo set echo off;                 >>!sql!
  echo set stat off;                 >>!sql!
  echo -- select count(*!rp! result_count from t01;   >>!sql!

)

for /l %%x in (1, 1, %n%) do (
  set /a c=100+%%x
  set sql=tmpins!c:~1,2!.tmp
  set log=tmpins!c:~1,2!.log
  
  @echo on
   start perfins_aux.bat  192.168.0.220/3333:/var/db/fb30/perfins.fdb !sql! !log!
  @echo off
)
exit
(при запуске без аргументов запустит ОДИН isql, вставляющий 10 млн строк в таблицу t01).

Вспомогательный батник, вызываемый из обоих вышеприведенных:
perfins_aux.bat
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@echo off
set db=%1
set sql=%2
set log=%3
echo %sql%
echo %log%
@echo on
isql %db% -i %sql% 1>%log% 2>&1
del %sql% 2>nul
exit


Логи работы 10 скриптов, вставлявших по 1 млн строк в 10 таблиц, а также лог вставки 10 млн строк в 1 таблицу (три прогона) - см. аттач.
Но если коротко, то:
parallel 10 connects, insert + commit, elapsed time, secondssingle connect, insert + commit, elapsed time, seconds104,00136,3983,04140,6796,34137,7887,06102,38
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542866
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а еще тут такая штука вылезла интересная: оказывается, чели поменять арх-ру на Super Classic , да назначить кеш коннекта = 2048, то:
1) время вставки 1 млн записей "в параллель" уменьшается с 90 до 20 сек - более чем в 4 раза!
2) время вставки 10 млн записей в "моноспектакле"... о стается тем же (!!).

В аттаче - логи.
Any comments ?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542874
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидAny comments ?между 2 и 10 потоками разница велика? :)
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542876
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chТаблоидAny comments ?между 2 и 10 потоками разница велика? :)не мерял, сделай сам это, плз. Всё приведено выше.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38542911
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустил рестор через service_mgr. Оставляю до утра.
Записи пишет "пачками": т.е. создаёт сразу по-многу, но затем ждёт завершения IO:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Wed Jan 29 23:17:56 2014: gbak:   32260000 records restored 
Wed Jan 29 23:17:56 2014: gbak:   32270000 records restored 
Wed Jan 29 23:17:56 2014: gbak:   32280000 records restored 
Wed Jan 29 23:17: 56  2014: gbak:   32290000 records restored
Wed Jan 29 23:18: 07  2014: gbak:   32300000 records restored 
Wed Jan 29 23:18:07 2014: gbak:   32310000 records restored 
Wed Jan 29 23:18:07 2014: gbak:   32320000 records restored 
. . .
Wed Jan 29 23:18:07 2014: gbak:   33440000 records restored 
Wed Jan 29 23:18:07 2014: gbak:   33450000 records restored 
Wed Jan 29 23:18: 07  2014: gbak:   33460000 records restored
Wed Jan 29 23:18: 22  2014: gbak:   33470000 records restored 
Wed Jan 29 23:18:22 2014: gbak:   33480000 records restored 
. . .
Wed Jan 29 23:18:22 2014: gbak:   34610000 records restored 
Wed Jan 29 23:18:22 2014: gbak:   34620000 records restored 
Wed Jan 29 23:18: 22  2014: gbak:   34630000 records restored
Wed Jan 29 23:18: 35  2014: gbak:   34640000 records restored 
Wed Jan 29 23:18:35 2014: gbak:   34650000 records restored 
. . .
(SuperClassic, кеш = 2048)
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38543078
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЗапустил рестор через service_mgr.Итого:
restore on…EventWITHOUT servicesWITH services3.0startJan 29 12:23:21Jan 29 23:05:42finishJan 29 13:59:11Jan 30 00:36:13datediff(second)575054312.5startJan 29 13:59:11Jan 30 00:36:14finishJan 29 19:30:28Jan 30 02:07:24datediff(second)198775470Кажись, в 2.5 про рестор без сервисов лучше забыть.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38543577
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидAny comments ?

Забавный тест. Получается, у Супера есть какой-то затык либо более узкий, чем HDD, либо блокировки на уровне файла, а не на уровне мьютексов в памяти?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38543622
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochПолучается, у Супера есть какой-то затык либо более узкий, чем HDD, либо блокировки на уровне файла, а не на уровне мьютексов в памяти?Не знаю, монстры придут - расскажут, авось.
Ты у себя запускал его ?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38543701
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

у меня совсем не до того. Черкнуть пару строк пока тест компиляетсягрузится - это да. А так я нужную мне базу не тестирую, отложил на потом...
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545700
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКажись, в 2.5 про рестор без сервисов лучше забыть.мнда, это точно надо запомнить: рестор в 2.5 - только через сервисы.

Проверил еще раз рестор продакшена, варианты *с* и *без* сервисов, на LI-V2.5.3.26737 и LI-T3.0.0.30813 Firebird 3.0 Extents.
ФБ в обоих случаях работает как SuperServer.
База имеет размер 16К.

Изменённые параметры конфигов:
1) 2.5 :
Код: plaintext
1.
2.
3.
4.
TempDirectories = /dev/shm;/tmp
DefaultDbCachePages = 524288
FileSystemCacheThreshold = 1000000
TempBlockSize = 67108864
TempCacheLimit = 4294967296

2) 3.0 :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
TempDirectories = /dev/shm;/tmp
DefaultDbCachePages = 512K
FileSystemCacheThreshold = 1024K
TempBlockSize = 64M
TempCacheLimit = 4096M
-- эти два вроде бы влиять не должны ?
LockMemSize = 10M 
LockHashSlots = 20063

Итого:
restore on…EventWITHOUT servicesWITH servicesLI-T3.0.0.30813startJan 31 09:35:31Jan 31 11:16:18finishJan 31 11:16:12Jan 31 12:52:19datediff (sec)6 041 5 761 max temp usage469 762 048 469 762 048 LI-V2.5.3.26737startJan 31 12:57:49Jan 31 18:28:41finishJan 31 18:28:38Jan 31 20:02:41datediff (sec)19 849 5 640 max temp usage4 764 729 344 4 764 729 344 ("max temp usage" - максимально зарегистрированный размер fb_sort_* файлов для каждого варианта)

Если сравнить с предыдущим замером:
restore on:EventWITHOUT servicesWITH services3.0startJan 29 12:23:21Jan 29 23:05:42finishJan 29 13:59:11Jan 30 00:36:13datediff(second)575054312.5startJan 29 13:59:11Jan 30 00:36:14finishJan 29 19:30:28Jan 30 02:07:24datediff(second)198775470
- то случайность уже исключается.

ЗЫ. Для 2.5 max temp usage таков, будто там TempCacheLimit = 4294967296 был проигнорирован и проставлен в дефолтные 64М. Если это так, то непонятно, почему это не повлияло на время рестора при ИСПОЛЬЗОВАНИИ service_mgr - если сравнивать его с таким же временем для ФБ-3.0: те же 5600...5700 сек. А вот если TempCacheLimit = 4294967296 в ФБ 2.5 всё таки *был* задействован таким, то совсем непонятно, откудова такое превышение вылезло.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545708
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще.
2 dimitr : на финише рестора LI-V2.5.3.26737 заваливался (что *с*, что *без* сервисов). Возможно, это опять та самая бага, которая вылезала ранее и по которой я тебе высылал коредампы. Но на всякий случай выслал в мыло еще одну пару бактрасс.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545820
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

4294967296 никаким боком не влазит в 32 бита, поэтому оказался равен нулю
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545822
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr4294967296 никаким боком не влазит в 32 бита, поэтому оказался равен нулю"Нуль" в рантайме - это дефолтные 64 М ?

ЗЫ. я правильно понимаю, что во всех версиях ФБ (как в 2.5, так и в 3.х ) максимальное значение для TempCacheLimit равно 2^32-1 = 429496729 5 байт ?
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545853
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид"Нуль" в рантайме - это дефолтные 64 М ?
нуль - он и в рантайме нуль

Таблоидя правильно понимаю, что во всех версиях ФБ (как в 2.5, так и в 3.х ) максимальное значение для TempCacheLimit равно 2^32-1 = 429496729 5 байт ?
для 2.х правильно, в 3.0 лимит равен 2^64-1.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545973
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

в RN этого нет
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38545998
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

думаю, это не единственное, чего там нет :-)
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38546016
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

в любом случае спасибо за информацию.
...
Рейтинг: 0 / 0
Старая песня о главном: распараллеливание рестора
    #38546271
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисв RN этого нет
Место этому в конфиге, в комментариях к параметру :)
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Старая песня о главном: распараллеливание рестора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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