powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Многопоточная активация индексов
10 сообщений из 10, страница 1 из 1
Многопоточная активация индексов
    #39733478
Sergey A. Volkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема ранее поднималась в теме Многопоточный gbak , но тема старая. Сейчас быстрые ssd и и по полсотни ядер на процессор. Так же есть задача в трекере firebird CORE-2992 , но хочется сабж сейчас.

Существуют утилиты для многопоточной активации индексов? И опыт их использования?
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39733496
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. VolkovСуществуют утилиты для многопоточной активации индексов?

isql. Запускаешь десяток в параллель и в каждом активируешь разные индексы. О результатах
не забудь доложить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39733499
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. VolkovПроблема ранее поднималась в теме Многопоточный gbak , но тема старая. Сейчас быстрые ssd и и по полсотни ядер на процессор. Так же есть задача в трекере firebird CORE-2992 , но хочется сабж сейчас.

Существуют утилиты для многопоточной активации индексов? И опыт их использования?

Многопоточный gbak если его успеют сделать будет не раньше beta 4.0. Утилит многопоточной активации индексов я не знаю. Но не факт, что там будет выигрыш, ты пробовал хотя бы эксперимент провести с несколькими isql окошками?
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39733549
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. Volkov,

лично я против этой идеи, хотя она реализована в InterBase XE3, там есть "ассистенты", которые ресторят индексы параллельно в разных тредах, и их количество рекомендуется устанавливать не больше N-1 от числа ядер процессора.
По умолчанию всегда стоит 1.

Против я потому, что индексы создаются подряд, а создание индекса требует места в temp (создается файл сортировки).
И файл в temp может быть в 6 раз больше, чем индекс занимает в БД (например, для создания индекса в 29 гиг нужен файл в темп размером 182 гиг).
Одно дело, когда индексы создаются последовательно. Но если параллельно, то может получиться так, что при 7ми "ассистентах" эти 7 индексов окажутся самыми жирными в базе, и суммарный размер файлов в temp будет больше, чем размер самой базы.
Таким образом, предсказать необходимое место в temp просто невозможно. И если его не хватит, произойдет облом.
(вот тут я не помню, гбак в версиях выше 2.1 продолжит активировать индексы, или перестанет).
Конечно, раз индексы создаются после рестора данных, и мы знаем количество записей и ширину индексируемых столбцов, можно было бы предположить требуемые размеры файлов сортировки, и выстроить список активируемых индексов так, чтобы при N "ассистентов" объем сортировки был всегда минимально возможным. Но, это ж надо алгоритм какой-то писать.

Кроме того, исходя из низкого параллельного IO на hdd ясно, что какую-то пользу из этого можно было бы извлечь либо на RAID 10 с большим количеством hdd, либо на SSD.

Я так и не удосужился провести такой тест. На IB пробовал, давно, на моем компе (с hdd) полезных результатов это не дало.
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39733550
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. VolkovСуществуют утилиты для многопоточной активации индексов? И опыт их использования?
добавлю, что можно самому сделать.
gbak -i и дальше активируй индексы чем хочешь, параллельно или нет.
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39736699
Sergey A. Volkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Провел тест.
Аппаратное обеспечение:
ЦП AMD Ryzen Threadripper 1950X 16
ОЗУ 64GB
Диск nvme Samsung SSD 960 PRO 512GB
Программное обеспечение:
ОС Linux, ядро 4.4.143-1.el7.elrepo.x86_64
Тест проводился на RedDatabase 2.6 и 3.0 64х битные версии (в данном разрезе будет аналогично Firebird 2.5 и 3.0).

Размер БД 35ГБ
Временные файлы в tmpfs
Самый тяжелый индекс активируется 36 секунд, всего активировалось 9696 индексов.
База в режиме асинхронной записи (forced write off).
На 2.6 восстановление в режиме embeded 49 минут, без индексов 27 минут.
На 3.0 восстановление в режиме embeded 32 минуты, без индексов 15 минут.
В тесте выполнялась активация всех индексов кроме внешних ключей, т.к. для них нужно отслеживать зависимости с главными ключами.
Тест генерируем N sql-скриптов, с помощью make запускаем N isql в embeded.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Проц	2.6		3.0
1	00:17:00	00:16:13
2	00:08:58	00:08:42
3	00:06:46	00:06:15
4	00:05:10	00:04:50
5	00:04:17	00:04:03
6	00:03:34	00:03:20
7	00:03:24	00:03:13
8	00:03:06	00:02:54
9	00:02:58	00:03:05
10	00:02:43	00:02:41
11	00:02:42	00:02:33
12	00:02:14	00:02:11
13	00:02:29	00:02:13
14	00:02:23	00:01:46
15	00:02:14	00:02:09
16	00:01:48	00:01:40

Какие выводы сделал для себя:
целесообразность многопоточной активации индексов есть, при количестве потоков >2;

привязка к ядру влияет на ~10-25% увеличивается с количество процессов; на многопроцессорных может быть больше;

нужно учитывать:

зависимость индексов (FK - PK);

ограничение ресурсов (размер временных файлов и размер в temp);

нужно делать утилиту
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39736736
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. Volkov,

мало данных. Непонятно насколько это были большие индексы. Может они были настолько маленькими что все умещались в памяти и даже не провоцировали внешние сортировки. Кстати если PK это обычный bigint с автоинкрементом, то для него индексы довольно компактные и фал сортировки не должен быть большим. Для индексов по большим строкам всё гораздо хуже.

Вижу вы тестировали на SSD, а что будет с обычным HDD? Ну когда они в RAID 10, может и нормально, а на одиночном могут быть тормоза.

Sergey A. VolkovКакие выводы сделал для себя:

я бы сюда добавил, что целесообразность может зависеть от железа, и включать такой режим можно только после предварительнго эксперимента.
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39838495
Sergey A. Volkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем мой велосипед https://github.com/NeoZX/plume/releases
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39838592
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey A. Volkov, с NUMA>1 (например 2xNUMA/2xCPU 8 cores) должно быть ещё быстрее, так как уменьшиться конкуренция потоков за шину.
...
Рейтинг: 0 / 0
Многопоточная активация индексов
    #39838659
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev,

мы для таких целей сделали свою утилиту, но уткнулись в такую особенность: при создании внешних ключей, одновременно (параллельно) можно создавать ключи только по разным таблицам. При попытке создавать по одной -- кидает ошибку. ФБ 3, последний билд.

а у нас как раз в БД есть 5 гигантских таблиц, по каждой из которых по нескольку десятков внешних ключей.

пока еще не приступали к тестированию на серьезном железе, так чтобы задействовать 150-200 Гб ОЗУ под файлы сортировки, поэтому не могу привести цифры по ускорению.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Многопоточная активация индексов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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