|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Проблема ранее поднималась в теме Многопоточный gbak , но тема старая. Сейчас быстрые ssd и и по полсотни ядер на процессор. Так же есть задача в трекере firebird CORE-2992 , но хочется сабж сейчас. Существуют утилиты для многопоточной активации индексов? И опыт их использования? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 13:22 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Sergey A. VolkovСуществуют утилиты для многопоточной активации индексов? isql. Запускаешь десяток в параллель и в каждом активируешь разные индексы. О результатах не забудь доложить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 13:36 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Sergey A. VolkovПроблема ранее поднималась в теме Многопоточный gbak , но тема старая. Сейчас быстрые ssd и и по полсотни ядер на процессор. Так же есть задача в трекере firebird CORE-2992 , но хочется сабж сейчас. Существуют утилиты для многопоточной активации индексов? И опыт их использования? Многопоточный gbak если его успеют сделать будет не раньше beta 4.0. Утилит многопоточной активации индексов я не знаю. Но не факт, что там будет выигрыш, ты пробовал хотя бы эксперимент провести с несколькими isql окошками? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 13:38 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
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) полезных результатов это не дало. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:39 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Sergey A. VolkovСуществуют утилиты для многопоточной активации индексов? И опыт их использования? добавлю, что можно самому сделать. gbak -i и дальше активируй индексы чем хочешь, параллельно или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2018, 14:41 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Провел тест. Аппаратное обеспечение: ЦП 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; привязка к ядру влияет на ~10-25% увеличивается с количество процессов; на многопроцессорных может быть больше; нужно учитывать: зависимость индексов (FK - PK); ограничение ресурсов (размер временных файлов и размер в temp); нужно делать утилиту ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:27 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Sergey A. Volkov, мало данных. Непонятно насколько это были большие индексы. Может они были настолько маленькими что все умещались в памяти и даже не провоцировали внешние сортировки. Кстати если PK это обычный bigint с автоинкрементом, то для него индексы довольно компактные и фал сортировки не должен быть большим. Для индексов по большим строкам всё гораздо хуже. Вижу вы тестировали на SSD, а что будет с обычным HDD? Ну когда они в RAID 10, может и нормально, а на одиночном могут быть тормоза. Sergey A. VolkovКакие выводы сделал для себя: я бы сюда добавил, что целесообразность может зависеть от железа, и включать такой режим можно только после предварительнго эксперимента. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 12:57 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
В общем мой велосипед https://github.com/NeoZX/plume/releases ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 22:41 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
Sergey A. Volkov, с NUMA>1 (например 2xNUMA/2xCPU 8 cores) должно быть ещё быстрее, так как уменьшиться конкуренция потоков за шину. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 10:16 |
|
Многопоточная активация индексов
|
|||
---|---|---|---|
#18+
rdb_dev, мы для таких целей сделали свою утилиту, но уткнулись в такую особенность: при создании внешних ключей, одновременно (параллельно) можно создавать ключи только по разным таблицам. При попытке создавать по одной -- кидает ошибку. ФБ 3, последний билд. а у нас как раз в БД есть 5 гигантских таблиц, по каждой из которых по нескольку десятков внешних ключей. пока еще не приступали к тестированию на серьезном железе, так чтобы задействовать 150-200 Гб ОЗУ под файлы сортировки, поэтому не могу привести цифры по ускорению. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 11:24 |
|
|
start [/forum/topic.php?fid=40&fpage=22&tid=1560654]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 129ms |
0 / 0 |