Разве Redis не должен кэшировать записи в БД?

0

Мой сервер - Debian 9.0. Он имеет жесткий диск SSD с 32 оперативной памятью. и i7 с 4 (8) ядрами. У меня 4 веб-сайта. 2 из них очень маленькие и два больших. Большие базы данных (mysql) имеют размер около 120 + 60 МБ. Мой веб-сервер - nginx, также использующий лак.

Ну, я хочу узнать о Linux, поэтому начал читать статьи о настройке nginx, mysql, php-fpm и т.д. Я настраивал mysql, установил mysqltuner. Он посоветовал мне установить "query_cache_size" и "query_cache_type" на 0, что означает отключение кэша.

Я сделал. Однако мои сайты становятся все более медленными. Моя веб-страница размером 680 Кбайт загружалась через 700 мс, но после отключения query_cache скорость уменьшилась почти до 1,5 секунд. Было интересно. Я возвращаю query_cache_size обратно в 128M. Таким образом, скорость была восстановлена. Я больше читал о настройке query_cache и читал статью Зайцева (на percona.com), где он утверждает, что использование большого кеша проблематично, и он говорит в конце своей статьи: "Во многих случаях вам может потребоваться отключить кеш запросов вообще и использовать внешний кеш, такой как memcached, который не имеет этой проблемы ".

https://www.percona.com/blog/2007/03/23/beware-large-query_cache-sizes/

Итак, я установил REDIS (который, по их словам, лучше, чем memcached, и делает все лучше). Я установил его, я также установил плагин wordpress для redis. Я контролирую redis, и он работает очень хорошо. Однако происходят две вещи:

1) Redis не улучшил скорость моего сайта. Это то же самое. Нет разницы. Возможно, это потому, что мои веб-страницы очень маленькие (не более 700 кб), а мои базы данных также малы.

2) Когда я отключу кеш запросов mysql, мой веб-сайт снова становится очень медленным.

Так разве redis должен кэшировать все записи БД и использовать их намного быстрее, чем mysql? Как моя скорость веб-страницы уменьшается, когда я отключу кеш запросов mysql?

Теги:
nginx
mariadb
redis
memcached

1 ответ

0

Я согласен, что 700 мс слишком длинны. Правильно спроектированный, вы должны иметь возможность выполнить сотни запросов MySQL за это время; похоже, что нет?

Я согласен, что большой кэш запросов обычно неразумный:

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

У вас небольшая база данных - до 1 ГБ за все? При 32 ГБ оперативной памяти вы должны иметь возможность кэшировать все данные и индексы все время. Таким образом, замедление будет связано с плохой индексацией и/или плохой формулировкой запросов.

Надеюсь, вы используете InnoDB, а не MyISAM. С InnoDB вам необходимо установить innodb_buffer_pool_size не более чем на 70% доступной ОЗУ. У вас есть несколько продуктов, работающих в 32G?? Таким образом, я не скажу, что 70% из 32. (Примечание: Обмен производительности ужасен для производительности.) Поскольку у вас так мало данных, возможно, 2G будет хорошей настройкой?

Посмотрите запросы на своей "слишком медленной" веб-странице. Также давайте посмотрим SHOW CREATE TABLE для таблиц. Вы знаете о "составных" индексах? Знаете ли вы, что не скрывать индексированные столбцы в вызовах функций?

Возможно, моя поваренная книга поможет вам здесь. Если вы используете WP, он содержит раздел о том, как ускорить wp_postmeta. Если вам нужна дополнительная помощь, запустите другой вопрос с самым медленным запросом, его EXPLAIN и его схемой.

  • 0
    Нет-нет, мой общий веб-сайт загружается за 700 мс .. (Все изображения, сценарии Google AdSense, текст и т. Д. И т. Д. И т. Д.). Моя база данных составляет около 200 МБ. Кстати, как получается, что innodb_buffer_pool_chunk_size не отображается в "ПОКАЗАТЬ ПЕРЕМЕННЫЕ Как"% innodb% ";
  • 0
    @LinuxNewbie - Какую версию MySQL вы используете? innodb_buffer_pool_chunk_size был представлен в 5.7.5.
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню