Одной из проблем, с которой пришлось столкнуться при оптимизации сервера с несколькими интернет-магазинами на опенкарте — это очень активная работа скриптов сайта с базой данных. А это выливалось в то что mysqd съедал на сервере всю доступную оперативную память и адски грузил процессор/память.

Кроме оптимизации самого мускуля (которая помогла отчасти решить вопрос) нашелся ещё один метод борьбы с этой печалью.
А именно — кеширование всех запросов интернет-магазина в медленно «остывающий» кеш в оперативной памяти (memcache).

Для этой цели добрые люди сделали специальный драйвер MySQL для OpenCart`а, который в связке с модифицированным модулем кеширования отправляет каждое сочетание «SQL_запрос+результат_из_БД+уникальный_ключ» на некоторое время в хранилище мемкеша. Как результат — при следующем таком же запросе готовый ответ будет практически молниеносно взят из кеша в оперативной памяти, а mysqld вообще не узнает что к нему кто-то обращался. 🙂 Если  же запроса в кеше нет или время его хранения истекло — обращение переводится к мускулу, и тот отдаёт свежий и актуальный ответ, который немедленно кешируется на будущее.

Установка модуля кеширования данных в memcache

Внимание!

Для того чтобы этот способ адекватно работал, на сервере должен быть установлен memcached! 

Итак, для установки модуля кеширования скачайте архив cache.zip:

Скачать cache.zip 

Распакуйте его и файл cache.php закачайте с заменой в папку сайта /system/library/

После этого откройте файл config.php

Важный момент — редактировать нужно исключительно config.php  который находится в корневой папке сайта.

файл /admin/config.php  трогать ни в коем случае не надо!

И добавьте вот эти строки:

define('CACHE_DRIVER', 'memcached');
define('MEMCACHE_HOSTNAME', 'localhost');
define('MEMCACHE_PORT', '11211');
define('MEMCACHE_NAMESPACE', 'opencart_test');
define('DB_CACHED_EXPIRE', 3600);

 

где,

  • CACHE_DRIVER — драйвер кеширования. Если значение этого поля отличается от ‘memcached’, то кэш сохраняется в файлы (папка /system/cache/).
  • MEMCACHE_HOSTNAME = адрес сервера, где находится мемкеш. По-умолчанию — localhost.
  • MEMCACHE_PORT — порт, который случается сервисом memcached. По-умоллчанию — 11211.
  • MEMCACHE_NAMESPACE — задаётся в случае если сайтов на сервере несколько для того чтобы все сохраняемые ресурсы каждого из них имели уникальное имя.
  • DB_CACHED_EXPIRE — время хранения данных в кеше. Указывается в секундах. 3600 сек — 1 час.  600 сек — 10 минут.

 

Установка модифицированного драйвера MySQL умеющего работать с memcache

Следующим шагом скачайте модифицированный драйвер mysql

Скачать mysql_cached.zip 

Распакуйте архив и закачайте файл mysql_cached.php в папку сайта /system/database/

После этого откройте файл config.php , найдите строку define(‘DB_DRIVER’, ‘mysqli’);  и замените её на

define('DB_DRIVER', 'mysql_cached');

Всё, больше ничего делать не нужно. После этого все данные включая готовые страницы и запросы к базе данных будут кешироваться в memcache. А это здорово разгружает сервер и ускоряет работу сайта!