Чому 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 та кешу запитів. Однак ви (розробник / DBA) можете бути жертвою тієї війни через погані результати запитів, навіть якщо існує такий мирний договір.

Залежно від наступного

  • Навантаження
  • Частота змін
  • Частота читання одних і тих же даних

Ви повинні встановити query_cache_size на будь-яке число, яке Ви відчуваєте, збільшує продуктивність (Це рівносильно запуску підземного руху).

ЕПІЛОГ

Якщо ви цікавитесь, звідки я придумав цю історію війни, будь ласка, перегляньте моє старе повідомлення

Прочитайте це уважно, тому що я дізнався це на сторінках 209-215 високоефективної MySQL (2-е видання)

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

ПРИМІТКА. Я розумію, що питання стосувалося типу query_cache_type . Це впливає на кеш запитів. Відключення кешу зменшує домінування InnoDB над ним. Встановлення типу query_cache_type вручну просто змушує розробника / DBA ретельно продумати тип запитів, з яким буде стикатися кеш запитів.


Привіт, я прочитав усі ваші посилання. Насправді я спробував знову вимкнути кеш запитів, і ми побачимо, що завантаження значно зростає. Тому нам потрібно знову ввімкнути. Я не кажу, що ви говорите неправильно, можливо, просто наш додаток читається важкий і кеш запитів дуже корисний для зменшення завантаження .. (на нашому веб-сайті працює WordPress)
Йога

3
Якби більше таких публікацій ТА читали так (дякую за веселу аналогію)! Б'юсь об заклад, що щасливим дітям Роландо щовечора розповідають такі історії перед сном MySQL! ;)
rinogo

2
"Сторінки 209-215 високоефективної MySQL (2-е видання)" стосується глави під назвою "Кеш запитів MySQL", від "Коли кеш запитів корисний" і до кінця. Це відповідає сторінкам 320-329 у 3-му виданні.
Петро В. Морч

8

У мене в блозі пояснюється, чому це тут .

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


Як продовження моєї посади, Стюарт Сміт описує вплив як "на порядок" гірший flamingspork.com/blog/2014/06/05/…
Morgan Tocker

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.