Я аспирант, изучающий OLAP с Мондрианом OLAP. Поэтому я хочу вставить данные в InnoDB (MySQL 5.5) быстрее при начальной загрузке. В этой среде единственным пользователем является я, поэтому я думаю, что может позволить более свободные настройки для скорости вставки. На данный момент я использую следующие приемы.
- отключить
log_bin
- включить
skip-innodb-doublewrite
- установить
transaction_isolation
наREAD-COMMITTED
илиREAD-UNCOMMITTED
( на самом делеREAD-COMMITED
) - установить
innodb_flush_log_at_trx_commit
на0
или2
( на самом деле0
) - установить
innodb_buffer_pool_size
5 ГБ (в системе 6 ГБ ОЗУ)
Есть ли еще методы для более быстрой вставки в InnoDB? И нужно ли модифицировать innodb_io_read_thread
и innodb_io_write_thread
? Если вам нужна дополнительная информация, пожалуйста, скажите мне.
innodb_read_io_threads
,innodb_write_io_threads
и `innodb_io_capacity.Есть целый документ, посвященный массовой загрузке данных в InnoDB. Основные моменты:
SET autocommit=0;...sql import;COMMIT;
отключите внешние и уникальные проверки (вы не можете полностью отключить все индексы):
Третий может или не может помочь вам, поэтому я предлагаю прочитать эту ссылку, чтобы увидеть, как вы изначально загружаете данные. Например, если вы разбиваете нагрузку на несколько вставок для одновременного запуска, это определенно поможет вам установить значение 2. Если вы выполняете одну большую многострочную вставку, она не будет делать много (если вообще что-то) для Помогите.
Поскольку вы обращаетесь к двоичному журналу для этой начальной вставки, вам не следует беспокоиться о пробелах в числах автоинкремента (если выполняются параллельные вставки).
источник
Вы можете использовать следующие методы для ускорения вставки:
INSERT
операторы с несколькимиVALUES
списками, чтобы вставить несколько строк одновременно. Это значительно быстрее (во многих случаях быстрее), чем использование отдельных однострочныхINSERT
операторов. Если вы добавляете данные в непустую таблицу, вы можете настроить переменную bulk_insert_buffer_size, чтобы сделать вставку данных еще быстрее.LOAD DATA INFILE
. Обычно это в 20 раз быстрее, чем с помощьюINSERT
операторов. Видетьисточник
План A: «Пакетные» INSERT - несколько строк на оператор INSERT. Предложите около 1000 строк на утверждение. autocommit = on, нет явного BEGIN ... COMMIT
План Б: ЗАГРУЗИТЬ ДАННЫЕ
Если вы вставляете слишком много строк одновременно, InnoDB должен выполнить больше работы, чтобы иметь возможность откатить вставку в случае сбоя. По этой причине я не согласен с autocommit = off, который помещает весь набор в одну транзакцию.
ЗАГРУЗИТЬ ДАННЫЕ всего набора строк может иметь такую же проблему, но это довольно быстро.
buffer_pool = 5G из 6G находится на грани слишком большого. Если произойдет обмен, производительность упадет.
РАЗДЕЛЕНИЕ, вероятно, сделает это медленнее.
SHOW CREATE TABLE - дополнительные ключи могут быть серьезным препятствием.
Вы используете InnoDB? или XtraDB?
источник
LOAD DATA
выглядели так быстро, но нам нужно записать данные в текст сразу как CSV, а затем использоватьLOAD DATA
правильно? / Я установлюbuffer_pool_size
4 ГБ.