Оптимизация работы Базы данных Opencart

Каждый кто делал магазин на Opencart c количеством товаров более 20000 штук, сталкивается с одной и той же проблемой — к сожалению из коробки данная система не может нормально работать с таким количеством товаров.  Вот о том, как ускорить работу Opencart при работе с таким количеством товаров и пойдет речь.



В первую очередь необходимо проинспектировать наш файл конфигурации mysql (в данном пункте речь пойдет только о выделенном сервере, так как если вы располагаетесь на хостинге то хостер сделал все за вас). Для Centos он находится в /etc/my.cnf. Данный файл желательно заменить в зависимости от настроек вашего сервера. В папке /usr/share/mysql располагаются 4 оптимизированных файла настроек mysql под разные сервера — my-small.cnf, my-medium.cnf, my-large.cnf и my-huge.cnf.  Выбираем под наш сервер, нашу память, наши запросы наиболее подходящий файл.  my-small.cnf — конфигурация для систем с обьемом памяти менее 64Mb, где mysql используется время от времени. Это не наш случай. medium.cnf — чуть лучше, под mysql может выделяться до 64Мb памяти. В общем то это тоже обычно не для нас, разве что очень маломощные VDS, VPS. my-large.cnf — уже посерьезнее,  для систем с оперативной памятью от 512Мb. my-huge.cnf — для систем  с оперативной памятью 1-2Gb.  Выбираем одну из наиболее подходящих нам конфигураций и переписываем ее вместо текущей my.cnf .

В консоли набираем:

cp /usr/share/mysql/my-large.cnf  /etc/my.cnf

и перезапускаем mysql

service mysqld restart

 

Далее перейдем к админке Opencart.  При работе Opencart нужно отключить подсчет товаров в категориях в верхнем меню

 

делается это в пункте админ панели Система — Настройки — Изменить — Опции — выставляем значение Нет.

 

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

ALTER TABLE oc_product_attribute ADD INDEX attribute_id ( attribute_id );
ALTER TABLE oc_product_attribute ADD INDEX language_id ( language_id );

ALTER TABLE oc_product_description ADD INDEX language_id ( language_id );

ALTER TABLE oc_product_image ADD INDEX product_id ( product_id );
ALTER TABLE oc_product_image ADD INDEX sort_order ( sort_order );

ALTER TABLE oc_product_option ADD INDEX product_id (product_id);
ALTER TABLE oc_product_option ADD INDEX option_id (option_id);

ALTER TABLE oc_product_option_value ADD INDEX product_option_id (product_option_id);
ALTER TABLE oc_product_option_value ADD INDEX product_id (product_id);
ALTER TABLE oc_product_option_value ADD INDEX option_id (option_id);
ALTER TABLE oc_product_option_value ADD INDEX option_value_id (option_value_id);
ALTER TABLE oc_product_option_value ADD INDEX subtract (subtract);
ALTER TABLE oc_product_option_value ADD INDEX quantity (quantity);

ALTER TABLE oc_product_reward ADD INDEX product_id ( product_id );
ALTER TABLE oc_product_reward ADD INDEX customer_group_id ( customer_group_id );

ALTER TABLE oc_product_to_category ADD INDEX category_id ( category_id );

ALTER TABLE oc_product_to_store ADD INDEX store_id ( store_id );

ALTER TABLE oc_setting ADD INDEX store_id ( store_id );
ALTER TABLE oc_setting ADD INDEX `group` ( `group` );
ALTER TABLE oc_setting ADD INDEX `key` ( `key` );
ALTER TABLE oc_setting ADD INDEX serialized ( serialized );

ALTER TABLE oc_url_alias ADD INDEX query ( query );

где «oc_» префикс базы данных, указывайте свой при добавлении. Если при выполнении возникают ошибки вероятно данные индексы у вас уже присутствуют.

 

Далее необходимо оптимизировать таблицу СЕО урл следующим запросом

ALTER TABLE `oc_url_alias` CHANGE `query` `query` VARCHAR( 32 ) NOT NULL;
ALTER TABLE `oc_url_alias` ADD INDEX `query` ( `query` );

 

Ну и в конце данных мероприятий я обычно устанавливаю модуль superdruid который также работает с индексами таблиц.  Данные действия довольно сильно влияют на быстродействие работы с базой данных. Конечно можно далее работать по оптимизации запросов, кешированию страниц,  но сие относится уже совсем к другой истории)

 

Пролистать наверх