Почему query_cache_type отключен по умолчанию, начиная с MySQL 5.6?

28

Мы обновились до MySQL 5.6 и начали видеть, что загрузка db-сервера значительно увеличилась, и, наконец, обнаружили, что query_cache_typeпо умолчанию он выключен с 5.6.

Мы включили его снова и видим уменьшение загрузки, почему это значение отключено по умолчанию, начиная с MySQL 5.6? Я не вижу проблемы во включенном.

йога
источник

Ответы:

39

Вам нужна история InnoDB, чтобы понять почему. Здесь это идет:

ВОЙНА ИСТОРИЯ

InnoDB и кеш запросов постоянно находятся в состоянии войны. InnoDB имеет тенденцию быть очень неуклюжим при проверке изменений в пуле буферов InnoDB и последующей перекрестной проверке кеша запросов для тех же самых изменений.

МИРНЫЙ ДОГОВОР

До MySQL 5.0 кэш запросов был отключен для InnoDB. Теперь InnoDB взаимодействует с ним. Чтобы упростить задачу, вы можете просто отключить кэш запросов, установив для параметра query_cache_size значение 0.

Согласно документации MySQL о query_cache_time

Если сервер запускается с параметром query_cache_type, равным 0, он вообще не получает мьютекс кэша запросов, что означает, что кэш запросов не может быть включен во время выполнения, и при выполнении запроса снижаются накладные расходы.

УСЛОВИЯ ПОДАЧИ

Установка для query_cache_size значения 0 не является универсальным решением.

Причина войны, в первую очередь, в накладных расходах. InnoDB всегда будет проверять изменения. Увеличенный кэш запросов сделает работу InnoDB намного сложнее. Отключение кеша запросов сделает InnoDB и Query Cache счастливыми. Тем не менее, вы (разработчик / администратор базы данных) можете стать жертвой этой войны из-за плохой производительности запросов даже при наличии такого мирного договора.

В зависимости от следующего

  • Нагрузка
  • Частота изменений
  • Частота чтения тех же данных

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

Эпилог

Если вам интересно, откуда я взялся за эту военную историю, пожалуйста, смотрите мой старый пост

Прочтите это внимательно, потому что я узнал об этом на страницах 209-215 высокопроизводительного MySQL (2-е издание)

Я рекомендовал отключить кеш запросов другим

ПРИМЕЧАНИЕ: я понимаю, что вопрос был о query_cache_type . Это влияет на кеш запросов. Отключение кеша подавляет доминирование InnoDB над ним. Установка параметра query_cache_type вручную просто заставляет разработчика / администратора баз данных тщательно продумывать типы запросов, с которыми столкнется кэш запросов.

RolandoMySQLDBA
источник
Привет, я прочитал все ваши ссылки. На самом деле я попытался снова отключить кэш запросов, и мы снова видим значительное увеличение нагрузки .. поэтому нам нужно снова включить. Я не говорю, что вы говорите неправильно, может быть, просто наше приложение читается интенсивно, а кеш запросов очень полезен для снижения нагрузки .. (наш сайт работает под управлением WordPress)
Yoga
3
Если только больше ТАК постов читать так (спасибо за забавную аналогию)! Могу поспорить, что счастливые дети Роландо каждую ночь рассказывают такие истории MySQL! ;)
Риного
2
«Страницы 209-215 высокопроизводительного MySQL (2-е издание)» относятся к главе «MySQL Query Cache», от «Когда полезен Query Cache» и до конца. Это соответствует страницам 320-329 в 3-м издании.
Питер В. Мёрч
8

У меня есть сообщение в блоге, объясняющее, почему это здесь .

Краткая версия: кеш запросов вызывает проблемы масштабируемости на многоядерных машинах. Так что теперь он отключен по умолчанию.

Морган Токер
источник
В качестве продолжения моего поста Стюарт Смит описывает воздействие как «на порядок» хуже flamingspork.com/blog/2014/06/05/…
Морган Токер