Назад | Перейти на главную страницу

Включение MySQL query_cache_size Innodb Lock безопасно?

В query_cache_size похоже на тип настройки, которую обычно хотели бы включить, что меня озадачило, поскольку по умолчанию 0. Затем я прочитал следующее о query_cache_wlock_invalidate установка из документации MySQL

Обычно, когда один клиент получает блокировку WRITE для таблицы MyISAM, другие клиенты не блокируются от выдачи инструкций, которые читают из таблицы, если результаты запроса присутствуют в кэше запросов. Установка этой переменной в 1 приводит к получению блокировки WRITE для таблицы, чтобы сделать недействительными любые запросы в кэше запросов, которые ссылаются на таблицу. Это заставляет других клиентов, которые пытаются получить доступ к таблице, ждать, пока действует блокировка.

Здесь не упоминается движок InnoDB. Этот параметр также предотвращает чтение из кеша, когда Innodb имеет блокировку записи для строки / таблицы?

Я рад, что вы спросили о InnoDB и Query Cache.

ИМХО Они никогда не должны повторяться в одном предложении или в одном разговоре. Пожалуйста, простите за то, что я использовал их в первом предложении.

Помимо шуток, я много раз обращался к администратору базы данных StackExchange

Вот мой Jun 11, 2014 сообщение о том, почему его следует отключить (с исключениями)

Согласно Документация MySQL по состояниям кэша запросов

Это состояние возникает, когда сеанс ожидает блокировки кеша запроса. Это может произойти для любого оператора, который должен выполнить некоторую операцию кеширования запроса, например INSERT или DELETE, который делает недействительным кеш запроса, SELECT, который ищет кешированную запись, RESET QUERY CACHE и т. Д.

Это определенно огромная проблема с таблицами InnoDB, потому что механизмы InnoDB делают вторжения в кеше запросов. Я писал об этом явлении раньше

У вас есть несколько вариантов в этом

ОПЦИЯ 1

Вы можете полностью отключить кеш запросов

SET GLOBAL query_cache_size = 0;

Если после этого все запросы к таблицам InnoDB будут удовлетворительными, добавьте это в my.cnf

[mysqld]
query_cache_size = 0;

ВАРИАНТ №2

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

  • Вы могли поднять query_cache_min_res_unit. По умолчанию это 4K. Если вы установите это выше, это предотвратит попадание небольших результатов в кеш запроса. Это уменьшит общее количество записей в кэше запросов.
  • Вы можете захотеть изменить query_cache_limit. По умолчанию - 1M.

Изменение этих параметров может позволить вам указать минимальное количество записей в кэше запросов.

Например, если вы установите следующие

[mysqld]
query_cache_size = 2G
query_cache_min_res_unit = 64M
query_cache_limit = 128M

Это ограничит количество записей кеша запросов.

  • Минимум 16 (2G / 128M)
  • Максимум 32 (2G / 64M)

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

ВАШ АКТУАЛЬНЫЙ ВОПРОС

Включение MySQL query_cache_size Innodb Lock безопасно?

Да, это так. Фактически, InnoDB может стать настоящим фанатом контроля в этом отношении, если вы сделаете Query Cache слишком большим. Хотя общий ответ для этого - оставить query_cache_size = 0, можно разумно изменить его размер для вашего набора данных и рабочей нагрузки.