Мне нужно загрузить данные, которые MySQL не может обработать из-за количества - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь загрузить данные из MySQL (5.7.22-22-log) через Spring Batch.Есть около 200 миллионов строк.Проблемы в том, что

  1. , если я загружаю хотя бы 100M строк, это занимает ~ 12 минут, что слишком долго. Сбой Spring Batch с чем-то вроде

HikariPool-1 -Обнаружено голодание потока или скачок тактовой частоты

или

HikariPool-1 - соединение com.mysql.jdbc.JDBC4Connection@7fece665, помеченное как разорванное из-за SQLSTATE (08S01), ErrorCode(0) com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи

если я загружаю все строки, то через некоторое время mysql заканчивается сообщением

Killed

Теперь я пытаюсь просто загрузить столбец с идентификатором-s, но на самом деле мне нужно добавить пару соединений, и это не выглядит как упрощение для запроса.

Как это можно решить в целом?

Может быть, я могу скачатьчастично?Ну, я уже использую параметры размера выборки и размера чанка, но я предполагаю, что они применяются после выполнения запроса, когда мой запрос еще не может быть выполнен.

Я имею в виду загрузку частично и сделать это вручную, как выбор данных с этиминтервал id-s, затем следующий и т. д.

Но у меня есть работа cron, которая должна выполнять всю работу.Я должен как-то запланировать подпрограммы и объединить результаты.

Может быть, есть более продвинутые методы?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Шаг, ориентированный на чанк, с разумным размером чанка - это путь.Однако вам нужно убедиться, что время жизни MySQL-соединения установлено правильно, чтобы сервер MySQL не прерывал ваше соединение.Вы можете найти более подробную информацию в этом ответе: https://stackoverflow.com/a/2748741/5019386

0 голосов
/ 27 сентября 2018

Может быть, вы можете увеличить время ожидания базы данных MySQL.Я нашел эту ссылку. Увеличение таймаута MySQL

...