stalker780

Файловое/Memcached кэширование mysqli

Рекомендуемые сообщения

sitecreator    511

Ваш модуль дает что-то большее чем может дать кеширование запросов силами самой mysql?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Ну он как минимум умеет кешировать запросы с NOW() коих в стандартом OC/ocStore валом. Причем, жизненно важных (SELECT * FROM product WHERE date_available <= NOW())...

Плюс неоднократно сталкивался с дешевыми хостингами, у которых попросту кеш mysql отключен или установлен в 1Мб.

Изначально, модуль писался для товарища, у которого дешманский хостинг ограничивает количество sql запросов в минуту, а после апгрейда сайта с OC 1.0 на OC 1.5 количество запросов выросло в десятки раз. Результатом внедрения модуля, стало практически 0 кол-во запросов + возросшая скорость отдачи страниц.

Сейчас на подходе версия, умеющая автоматом подхватывать memcache(d) (при его наличии, конечно же) на локалхосте и использующая его в качестве хранилища кеша.

Кстати, даже с включенным кешем mysql, при использовании memcached я вижу 20-40% прирост в скорости открытия страниц. Так, что кеш mysql тоже не так быстр, как хотелось бы. Похоже много времени занимает само подключение к серверу mysql.

PS
Вряд ли для человека, хорошо знающего OpenCart и умеющего правильно настроить VPS, этот модуль станет полезным. Можно прописать кеш в моделях + поставить выложенный здесь же на форуме модуль кеширования memcached. Я просто объединил этот функционал и кеширую ВСЕ Select'ы, кроме вписанных в исключения.
Более того, на одном из хостингов были даже замечены значительные тормоза после установки этого модуля. Подозрения на мертвую файловую систему на серваке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sitecreator    511
Плюс неоднократно сталкивался с дешевыми хостингами, у которых попросту кеш mysql отключен или установлен в 1Мб.

 

 

с дешевыми, это вы верно заметили, в этом плане просто беда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Как минимум мой умеет чистить кеш при INSERT/UPDATE/DELETE, тоесть обновление данных происходит прозрачно для юзера, как только он вносит изменения в админке

+ массив с исключениями, при нахождении которых кеш не чистится

+ mysqli

+ встроенный монитор медленных запросов

 

+ как я уже писал выше, на подходе версия с авто-memcached

+ в новой версии будет массив исключений с некешируемыми запросами

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 410

при любом INSERT/UPDATE/DELETE ? нет проверки на таблицу?

ну мемкеш недолго прикрутить, остальное ерунда.

т.е. по сути ничего нового?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

при любом INSERT/UPDATE/DELETE ? нет проверки на таблицу?

ну мемкеш недолго прикрутить, остальное ерунда.

т.е. по сути ничего нового?

Есть в планах проверка таблицы, но пока не придумал, как это грамотно реализовать. Опять же с мемкешем есть проблема - он не умеет работать с неймспейсами.

А что можно придумать нового в связке php+mysql? :)

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

 

Повторюсь:

Вряд ли для человека, хорошо знающего OpenCart и умеющего правильно настроить VPS, этот модуль станет полезным. Можно прописать кеш в моделях + поставить выложенный здесь же на форуме модуль кеширования memcached. Я просто объединил этот функционал

 

По отдельности все это есть на этом форуме и других профильных бесплатно. Цель была все объединить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 410

и не совсем ясно как устроен кеш на диске. недавно разбирался с дорогим модулем кеширования целых страниц. по началу было заметно уменьшение скорости загрузки, но когда кол-во файлов кеша перевалило за 1000 начались тормоза из-за файловой системы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

и не совсем ясно как устроен кеш на диске. недавно разбирался с дорогим модулем кеширования целых страниц. по началу было заметно уменьшение скорости загрузки, но когда кол-во файлов кеша перевалило за 1000 начались тормоза из-за файловой системы

Кеш на диске устроен по принципу стандартного класса $this->cache с небольшой доработкой в виде отключения сортировки у glob - работает быстрее, но при увеличении кол-ва файлов glob в любом случае начинает тормозить. На своем хостинге тестировал, тормоза начинаются где-то после 5000 файлов в кеше.

Поэтому и введен массив с исключениями из кеширования. Он позволяет более гибко настроить кеш и исключить незначительные мелкие запросы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Реализовал парсинг запросов, теперь файловый кеш каждой таблицы складывается в отдельную папку. Разделил кеш админки и фронтенда. Таким образом значительно ускорена работа glob с большим кол-вом файлов.

 

Болагодаря парсингу, теперь не происходит полный сброс файлового кеша при апдейтах. Модуль знает какая таблица обновилась и чистит только ее кеш.

 

Модуль теперь умеет кешировать не все, а только медленные запросы. Скорость медленных запросов настраивается в параметрах.

 

Новая версия проходит усиленное тестирование.

Вижу, что нужно делать менеджер кеша, чтобы из админки можно было управлять кешем вручную.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lysa    0

Купила, очень довольна. Сайт стал летать. Спасибо))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Купила, очень довольна. Сайт стал летать. Спасибо))

Спасибо за спасибо ;)

 

Держите меня в курсе, как будет себя вести сайт.

 

Обновил файл:

  • + Добавлена замена NOW() на текущую дату в SELECT запросах, это позволяет серверу Mysql самостоятельно кэшировать запросы (при правильной настройке сервера)
  • + 2 новых параметра настройки:
  • $this->replace_date = true;
  • $this->replace_date_format = "Y-m-d";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lysa    0

Скачала обновлённый файл, к сожалению у меня ошибка: 

Warning: MemcachePool::set() [memcachepool.set]: The lowest two bytes of the flags array is reserved for pecl/memcache internal use in /...../system/database/mysqli_cached.php on line 448

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Скачала обновлённый файл, к сожалению у меня ошибка: 

Warning: MemcachePool::set() [memcachepool.set]: The lowest two bytes of the flags array is reserved for pecl/memcache internal use in /...../system/database/mysqli_cached.php on line 448

Честно говоря эта ошибка должна была у вас вылезти и на более ранних версиях :)

Была проблема в работе с memcache. Я его практически не проверял, т.к. на всех серверах пользуюсь memcached, а у них как оказалось разный синтаксис комманды set.

 

Ошибку поправил. Скачайте последнюю версию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
lysa    0

В ранней версии всё в порядке, ошибки нет.

Скачала последнюю версию, слетел мой дизайн и стал дефолтовый, не находит категории сайта: Category not found! Почему то стал английский язык.

И ошибки:

 

Notice: Trying to get property of non-object in /..../index.php on line 57
Notice: Trying to get property of non-object in /..../index.php on line 66
Warning: Invalid argument supplied for foreach() in /..../index.php on line 66
Notice: Trying to get property of non-object in /..../index.php on line 74

 

index.php:

if ($store_query->num_rows) {	$config->set('config_store_id', $store_query->row['store_id']);} else {	$config->set('config_store_id', 0);}		// Settings$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");foreach ($query->rows as $setting) {	if (!$setting['serialized']) {		$config->set($setting['key'], $setting['value']);	} else {		$config->set($setting['key'], unserialize($setting['value']));	}}if (!$store_query->num_rows) {	$config->set('config_url', HTTP_SERVER);	$config->set('config_ssl', HTTPS_SERVER);	}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Странно... Какая у вас версия OC?

Кэш чистили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
halfhope    157

Странно... Какая у вас версия OC?

Кэш чистили?

 

А у Вас в модуле mysqli используется? Проблема явно в MySQLi. Решаема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
fjeka    8

Будет ли работать на чистом Opencart 1.5.1.3 ?

Для php-5.2.17-37 что лучше mysql или mqsqli ?

Есть ли смысл в данном модуле если уже использую для кеширования это https://opencartforum.com/files/file/1751-turbocache-%D0%B4%D0%BB%D1%8F-ocstore/

это https://opencartforum.com/files/file/1337-mcj-%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5-%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5-css-js/

и это https://opencartforum.com/files/file/59-memcache-support/

На сколько возрастет время генерации страницы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

Будет ли работать на чистом Opencart 1.5.1.3 ?

Будет. И на 1.4 и на 2.0.

 

Для php-5.2.17-37 что лучше mysql или mqsqli ?

Начиная с PHP 4.1.3 есть поддержка mysqli. Начиная с PHP 5.5 поддержка mysql прекращена. Разницы в скорости работы между mysql и mysqli нет.

http://phpclub.ru/talk/threads/mysqli-vs-mysql.57643/

 

Есть ли смысл в данном модуле если уже использую для кеширования это https://opencartforum.com/files/file/1751-turbocache-для-ocstore/

TurboCache, судя по описанию похож на работу моего модуля... но как я понял из описания он работает не автоматически а требует определенных манипуляций для нестандартных модулей.

Мой же модуль автоматически определяет тяжелые запросы и автоматом кеширует/оптимизирует их.

 

Мой модуль на работу с JS/CSS не влияет.

 

Поддержка memcache/memcached встроена и для localhost определяется автоматически.

 

На сколько возрастет время генерации страницы?

Этого я думаю вам никто не скажет :) Все зависит от конфигурации вашего хостинга и структуры SQL-запросов. Слишком много неизвестных.

В настройках модуля есть много параметров для гибкой настройки на разных хостингах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
markivav    0

У меня на сайте около 250 категорий, из за них страницы очень долго загружаются, Ваш модуль может справиться с этой проблемой. Если так, тогда сразу и куплю! Какие данные нужно для того, чтобы Вы могли точно сказать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
stalker780    72

У меня на сайте около 250 категорий, из за них страницы очень долго загружаются, Ваш модуль может справиться с этой проблемой. Если так, тогда сразу и куплю! Какие данные нужно для того, чтобы Вы могли точно сказать?

90%, что поможет. Особенно если у вас есть подсчет кол-ва товаров в категории.

Попробуйте поставьте модуль https://opencartforum.com/files/file/1629-opencart-profiler-vqmod/

С его помощью Вы сможете увидеть, есть ли у Вас медленные sql-запросы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dimochkaorg    4

Связано ли с этим, но после установки драйвера, который безумно помог сайту и он теперь действительно летает при попытке бэкапа выдается следующее: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 85 bytes) in /home/kolgotki/***/www/system/database/mysqli_cached.php on line 366

Хелп! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 410

связано напрямую если этот драйвер кеширует бэкап. перед бэкапом этот кеш нужно отключить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От artemmc

      View File


      Clean Cache Button - Кнопка "Очистка кэша"
      Данное дополнение для ocStore выводит дополнительную кнопку в шапке Админки - "Очистка кэша"
      Очень удобно когда она под рукой и не нужно совершать лишние действия когда нужно почистить кэш.
       
      Тестировалось на версиях ocStore 2.1.0.1 - 2.3.0.2.3
      Submitter artemmc Submitted 07/29/2017 Category Caching & Server Performance Системные требования Сайт разработчика https://startem.pro Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart Несовместим ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От artemmc
      Данное дополнение для ocStore выводит дополнительную кнопку в шапке Админки - "Очистка кэша"
      Очень удобно когда она под рукой и не нужно совершать лишние действия когда нужно почистить кэш.
       
      Тестировалось на версиях ocStore 2.1.0.1 - 2.3.0.2.3
    • От WebDevYV
      Есть скрипт, который на локальной машине работает корректно, но при установке его на сервер в файл product.tpl (cms OpenCart 2.3.0.2, theme Next Default 3)ничего не происходит. Скрипт берет цену из таблицы с учетом id товара. Ошибок код никаких не выводит. Спасибо за помощь.
      <?php $host = 'хост'; $db = 'имя бд'; $user = 'юзер нейм'; $pass = 'пароль'; $charset = 'utf8'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); $stmt = $pdo->prepare('SELECT price FROM oc_product WHERE product_id = ?'); $stmt->execute([$_GET['id']]); foreach ($stmt as $row) { echo 'price '.$row['price'] . "\n"; } ?>  
    • От kaljanov
      На хостинге установлен ModPagespeed, он кэширует все картинки в том числе и картнки из кэша opencart.
      Как бы отключить двойное кэширования ?
    • От Devorian
      Всем привет, делаю магазин для заказчика.
      Платформа Open Cart 2.3.0
      конфигурация VPS:
      4 core, 8 Gb RAM
      CentOS 6.x
       
      Собственно проблема:
      В магазине 20 тыс товаров. Подсчет товаров в категории отключен, установлен v2 cache модуль. Сжатие выставлено на 8.
       
      При открытии категории на MySQL происходит загрузка одного из ядер на 100% на несколько секунд. Как результат, категория открывается 7-10 секунд. Заказчик, само собой, бесится. Также по базе - см, скриншот. Болезнь показана в динамике.
       
       




  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу