Проблемы с производительностью при импорте данных в MariaDB 10.3 - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь разделить несколько больших таблиц InnoDB в MariaDB 10.3. Вставка данных в эти таблицы занимает несколько часов для каждой таблицы. Это кажется слишком медленным.

Эти таблицы были изначально созданы в MySQL 5.5 и недавно обновлены до MariaDB 10.3. При этом процессе обновления не было сообщений об ошибках или предупреждениях.

Таблицы содержат в среднем около 24 миллионов строк с около 600 МБ данных на таблицу.

Разделение этих таблиц выполнялось следующим образом:

  1. Создайте пустую копию целевой таблицы, разделенной по диапазону (в столбце datetime) с двумя разделами, один для хранения данных старше определенной даты, и будущий столбец, разделенный для хранения данных меньше MAXVALUE.
  2. Создайте 100 еженедельных разделов в этой пустой таблице.
  3. Вставить данные в эту таблицу с помощью оператора выбора:

    INSERT INTO new_table SELECT * from originalTable;

Используемая версия MariaDB - 10.3.9

Глобальные переменные являются значениями по умолчанию, за исключением:

autocommit = OFF
global_max_allowed_packet = 1073741824
innodb_buffer_pool_size = 10737418240
innodb_doublewrite = OFF

Это работает на CentOS версии 7.2.1511 с 65 ГБ памяти и 40 ядрами 3G.

Я читал в Интернете, что импорт 300Mb занимает несколько минут, но я даже не могу приблизиться к этой скорости. Моя работа кажется, что-то ужасно неправильно, но я не могу определить проблему. Любые идеи о том, как я могу ускорить это, очень ценятся?

1 Ответ

0 голосов
/ 06 ноября 2018

Почему вы хотите PARTITION много таблиц? Разделение, вопреки очевидной мудрости, не обеспечивает какой-либо внутренний выигрыш в производительности.

Вы пытались ALTER TABLE .. ADD PARTITION ....? Это может быть быстрее, чем использование INSERT .. SELECT, хотя я подозреваю, что базовые действия могут быть такими же.

OriginalTable имеет 24 миллиона (или около того) строк, верно? (Это будет одна транзакция.)

Вы упомянули много ядер; Вы пытаетесь использовать более одного?

Если таких таблиц несколько, у вас получатся сотни разделов. Каждый раздел фактически является отдельной «таблицей», поэтому необходимо увеличить значения table_open_cache и т. Д.

Как правило, индексы в многораздельной таблице должны отличаться от индексов в многораздельном эквиваленте. Вы это учли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...