Как ускорить выгрузку данных из 1с в Bitrix
Для более быстрой выгрузки данных на сайт с CMS Bitrix из 1c выполним несколько шагов.
В данной статье будет использоваться операционная система Ubuntu 16.04.2 LTS, MySQL 5.7.18.
Конфигурация виртуального сервера
- 2 Core CPU
- 8 GB RAM
- 200 GB SSD
Процесс будет состоять из 3-х этапов
- Создание резервной копии
- Изменение параметров в конфигурации MySQL.
- Конвертация типа таблиц в базе данных из MyISAM в InnoDB.
1. Прежде чем приступить к изменению конфигурации и конвертации ОБЯЗАТЕЛЬНО нужно сделать резервную копию (бекап) данных, на случай если что то пойдет не так.
- Для выгрузки базы можно использовать команду (без кавычек)
mysqldump --opt -u "Имя-пользователя-базы" –p"Пароль-пользователь-базы" " название-базы" > "копия-базы".sql-$(date "+%F")
или же использовать phpmyadmin.
- Файл конфигурации MySQL копируем командой
cp /etc/mysql/mysql.conf.d/mysqld.cnf mysqld.cnf_copy.
В директории в которой вы находитесь появиться два файла (резервная копия файла и базы).
"копия-базы".sql-2017-06-19
mysqld.cnf_copy
2. Изменение файла конфигурации MySQL 5.7.18
Открываем файл mysqld.cnf
nano /etc/mysql/mysql.conf.d/mysqld.cnf
и добавляем следующие параметры
innodb_buffer_pool_size = 4000M # определяет размер буфера. MySQL будет хранить данные таблиц и их индексы в оперативной памяти. Чем больше параметр тем меньше будет производиться операций с диском.
innodb_buffer_pool_instances = 4 # данный параметр включает несколько экземпляров пула буферов. Четыре пула по 1000M. Параметр innodb_buffer_pool_size делится на равный объем указанных пулов.
innodb_lock_wait_timeout = 50 # время простоя (в секундах), на протяжении
которого транзакция InnoDB может ожидать
блокировки прежде, чем будет произведен откат.
innodb_log_file_size = 512M # размер каждого файла журнала (указывается в мегабайтах). Чем больше значение, тем меньше производится операций с диском.
innodb_log_buffer_size = 32M # размер буфера, который в InnoDB используется
для записи информации файлов журналов на диск.
innodb_read_io_threads = 16 # количество потоков ввода-вывода для операций чтения в InnoDB.
innodb_write_io_threads = 16
# количество потоков ввода-вывода для операций записи в InnoDB.
innodb_io_capacity = 800 # Параметр innodb_io_capacity устанавливает верхний предел активности
ввода-вывода, выполняемого фоновыми задачами InnoDB, таких как очистка
страниц из пула буферов и объединение данных из буфера изменений. Предел
innodb_io_capacity является общим пределом для всех экземпляров пула
буферов.
innodb_flush_log_at_trx_commit = 0
# данный параметр сбрасывает буфер в лог файл независимо от транзакций
tmp_table_size = 32m # размер временных таблиц располагаемых в оперативной памяти
join_buffer_size = 2M # выделяемая память для запросов, когда объединение таблиц происходит без использования индексов.
query_cache_type = 1 # параметр отвечающий за работу кэша. (1 -ON) кэшировать все результаты, за исключением запросов SELECT SQL_NO_CACHE
Для проверки работоспособности MySQL в режиме реального времени, можно использовать следующую команду
mysqld --help --verbose --skip-networking 1>/dev/null
После выполнения команды, никаких сообщений не должно быть.
3. Конвертация типа таблиц в базе данных из MyISAM в InnoDB
- Выгружаем базу командой (без кавычек)
mysqldump --opt -u "Имя-пользователя-базы" –p"Пароль-пользователь-базы" "название-базы" > "базы".sql
- Далее нужно будет заменить MyISAM на InnoDB используя команду
sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' база.sql > новая-база.sql
- Удаляем старую базу
mysqladmin -u "Имя-пользователя-базы" –p"Пароль-пользователь-базы" drop "название-базы"
- Создаем заново базу
mysqladmin -u "Имя-пользователя-базы" –p"Пароль-пользователь-базы" create "название-базы"
- Загружаем измененную базу
mysql -u "Имя-пользователя-базы" –p"Пароль-пользователь-базы" "название-базы" < новая-база.sql
Перезапускаем MySQL
/etc/init.d/mysql restart
0 комментариев