169 похожих чатов

Всем привет! Нужно ускорить выполнение insert'а в одну таблицу 2700

записей. Каждый insert содержит в себе select. Выполняется порядка 12 минут. Решено было разбить 2700 записей на части и каждую часть инсертить в свою временную таблицу в отдельном потоке. Т.е. в единицу времени, чтобы выполнялось несколько SQL. Но почему-то получаю сплошные ролбэки от Hikari. Как можно посмотреть причину ролбэка?
Многопоточность через parallel stream:
listSplitted.parallelStream().forEach(rec->
...
jdbcTemplate=new JdbcTemplate(...);
rec.forEach(){
jdbcTemplate.update(...)
}

2 ответов

12 просмотров

1. Количество потоков должно быть не более размера пула 2. Соединения в твоей реализации должны быть открыты уже внутри parallel stream 3. Вообще подход так себе, ты на вставку одной строки открываешь отдельное соединение, что не быстро, даже при получении из пула Тебе нужен батчинг, можно батчем вставить все 2700 строк Альтернатива - разделить 2700 на количество соединений и попытаться вставить параллельными батчами, но я сомневаюсь что будет быстрее. Скорее будет медленнее

ну 12 минут это очень много, нужно разбираться и смотреть на что уходит время что там за селект, можно ли оптимизировать что за вставка, можно ли оптимизировать может база еле работает под текущей нагрузкой, а вы сверху еще тяжелый запрос можно оптимизировать текущую нагрузку, увеличивать железо, там партишены, шардинги возможно стоит пожертвовать согласованностью за счет предподсчета а параллельная запись может увеличить время

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Карта сайта