|  | 
| 
Многопоточная активация индексов | |||
|---|---|---|---|
| #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&gotonew=1&tid=1560654]: | 0ms | 
| get settings: | 10ms | 
| get forum list: | 14ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 46ms | 
| get topic data: | 10ms | 
| get first new msg: | 7ms | 
| get forum data: | 2ms | 
| get page messages: | 42ms | 
| get tp. blocked users: | 1ms | 
| others: | 12ms | 
| total: | 152ms | 

| 0 / 0 | 
