Мой сервер - 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?
Я согласен, что 700 мс слишком длинны. Правильно спроектированный, вы должны иметь возможность выполнить сотни запросов MySQL за это время; похоже, что нет?
Я согласен, что большой кэш запросов обычно неразумный:
У вас небольшая база данных - до 1 ГБ за все? При 32 ГБ оперативной памяти вы должны иметь возможность кэшировать все данные и индексы все время. Таким образом, замедление будет связано с плохой индексацией и/или плохой формулировкой запросов.
Надеюсь, вы используете InnoDB, а не MyISAM. С InnoDB вам необходимо установить innodb_buffer_pool_size
не более чем на 70% доступной ОЗУ. У вас есть несколько продуктов, работающих в 32G?? Таким образом, я не скажу, что 70% из 32. (Примечание: Обмен производительности ужасен для производительности.) Поскольку у вас так мало данных, возможно, 2G будет хорошей настройкой?
Посмотрите запросы на своей "слишком медленной" веб-странице. Также давайте посмотрим SHOW CREATE TABLE
для таблиц. Вы знаете о "составных" индексах? Знаете ли вы, что не скрывать индексированные столбцы в вызовах функций?
Возможно, моя поваренная книга поможет вам здесь. Если вы используете WP, он содержит раздел о том, как ускорить wp_postmeta
. Если вам нужна дополнительная помощь, запустите другой вопрос с самым медленным запросом, его EXPLAIN
и его схемой.
innodb_buffer_pool_chunk_size
был представлен в 5.7.5.