Восстановление больших дампов

Автор: Aport Суббота, Январь 31st, 2015 Нет комментариев

Рубрика: MySQL

Для ускорения импорта больших дампов MyISAM-таблиц в файле my.cnf советуют применять следующие настройки: 

[mysqld]
# Performance settings used for import.
delay_key_write=ALL
bulk_insert_buffer_size=256M

не забудте, после как прописали настройки, нужно перезапустить MySQL.

Что ж это за настройки такие:

delay_key_write - Данная переменная влияет на способ обработки ключевого слова DELAY_KEY_WRITE, оператора CREATE TABLES. Касается только таблиц MyISAM. Если при создании таблицы использовалось ключевое слово DELAY_KEY_WRITE, очистка буфера ключей производится не при каждом обновлении индекса, а только при закрытии таблицы, что позволяет увеличить скорость выполнения запросов.

  • OFF — ключевое слово DELAY_KEY_WRITE игнорируется
  • ON — DELAY_KEY_WRITE не игнорируется, значение по-умолчанию
  • ALL — все новые таблицы рассматриваются как созданные с использованием DELAY_KEY_WRITE.

max_allowed_packet - Максимальный объем одного SQL-запроса к серверу. Изначально буфер сообщений имеет размер net_buffer_length и при необходимости, автоматически увеличивается до значения данной переменной.

bulk_insert_buffer_size - В MySQL существует синтаксис, позволяющий делать добавление множества записей одним SQL-запросом.

Т.е. например, вместо n запросов

insert into table_name (id, val) values(1,1);
insert into table_name (id, val) values(1,2);
insert into table_name (id, val) values(1,3);
…………………………………….
insert into table_name (id, val) values(1,n);

можно выполнить один запрос:

insert into table_name (id, val) values(1,1),(1,2),(1,3),…(1,n)

Для таблиц типа MyISAM используется кэш, ускоряющий выполнение таких запросов.
Переменная bulk_insert_buffer_size устанавливает размер этого кэша.

По умолчанию – 8Мб. Установка bulk_insert_buffer_size в 0 отключит оптимизацию.

Если размер запроса превысит размер кэша, то Вы получите сообщение об ошибке.
Например, CodeIgniter выдал мне такое:

A Database Error Occurred

Error Number: 2006

MySQL server has gone away

Интересный способ ускорения, правда еще мной не опробованный это файл-обертка для дамп-файла:

SET AUTOCOMMIT=0;
SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;

START TRANSACTION;
SET NAMES utf8;

< содержимое дамп-файла >

COMIIT;

Еще можно поразбираться с «LOAD DATA INFILE» и с такими настройками

innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 8M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
skip-innodb_doublewrite
skip-innodb_checksums
innodb_flush_method = O_DIRECT
innodb_support_xa = 0

если меняем innodb_log_file_size, то погасив mysql, удаляем лог файлы innodb (обычно /var/lib/mysql/ib_logfile0, /var/lib/mysql/ib_logfile1)

Так же, оч. важно использовать параметр —opt как пример:

mysqldump —opt -h $(DB_HOST) -u$(DB_USER) $(DB_NAME) -p$(DB_PASS) > $(TMP_SQL)

И еще, интересная статейка »

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты