Одной из проблем, с которой пришлось столкнуться при оптимизации сервера с несколькими интернет-магазинами на опенкарте — это очень активная работа скриптов сайта с базой данных. А это выливалось в то что mysqd съедал на сервере всю доступную оперативную память и адски грузил процессор/память.
Кроме оптимизации самого мускуля (которая помогла отчасти решить вопрос) нашелся ещё один метод борьбы с этой печалью.
А именно — кеширование всех запросов интернет-магазина в медленно «остывающий» кеш в оперативной памяти (memcache).
Для этой цели добрые люди сделали специальный драйвер MySQL для OpenCart`а, который в связке с модифицированным модулем кеширования отправляет каждое сочетание «SQL_запрос+результат_из_БД+уникальный_ключ» на некоторое время в хранилище мемкеша. Как результат — при следующем таком же запросе готовый ответ будет практически молниеносно взят из кеша в оперативной памяти, а mysqld вообще не узнает что к нему кто-то обращался. 🙂 Если же запроса в кеше нет или время его хранения истекло — обращение переводится к мускулу, и тот отдаёт свежий и актуальный ответ, который немедленно кешируется на будущее.
Установка модуля кеширования данных в memcache
Внимание!
Для того чтобы этот способ адекватно работал, на сервере должен быть установлен memcached!
Итак, для установки модуля кеширования скачайте архив 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.php в папку сайта /system/database/
После этого откройте файл config.php , найдите строку define(‘DB_DRIVER’, ‘mysqli’); и замените её на
define('DB_DRIVER', 'mysql_cached');
Всё, больше ничего делать не нужно. После этого все данные включая готовые страницы и запросы к базе данных будут кешироваться в memcache. А это здорово разгружает сервер и ускоряет работу сайта!
Прокомментировать