В query_cache_size
похоже на тип настройки, которую обычно хотели бы включить, что меня озадачило, поскольку по умолчанию 0
. Затем я прочитал следующее о query_cache_wlock_invalidate
установка из документации MySQL
Обычно, когда один клиент получает блокировку WRITE для таблицы MyISAM, другие клиенты не блокируются от выдачи инструкций, которые читают из таблицы, если результаты запроса присутствуют в кэше запросов. Установка этой переменной в 1 приводит к получению блокировки WRITE для таблицы, чтобы сделать недействительными любые запросы в кэше запросов, которые ссылаются на таблицу. Это заставляет других клиентов, которые пытаются получить доступ к таблице, ждать, пока действует блокировка.
Здесь не упоминается движок InnoDB. Этот параметр также предотвращает чтение из кеша, когда Innodb имеет блокировку записи для строки / таблицы?
Я рад, что вы спросили о InnoDB и Query Cache.
ИМХО Они никогда не должны повторяться в одном предложении или в одном разговоре. Пожалуйста, простите за то, что я использовал их в первом предложении.
Помимо шуток, я много раз обращался к администратору базы данных StackExchange
Jun 11, 2014
: Увеличен query_cache_size, запросы резко замедляются при увеличении трафикаSep 26, 2013
: значение попадания в кеш запроса не меняется в моей базе данныхSep 05, 2012
: Стоят ли когда-либо накладные расходы, связанные с частым аннулированием кеша запросов?Вот мой Jun 11, 2014
сообщение о том, почему его следует отключить (с исключениями)
Согласно Документация MySQL по состояниям кэша запросов
Это состояние возникает, когда сеанс ожидает блокировки кеша запроса. Это может произойти для любого оператора, который должен выполнить некоторую операцию кеширования запроса, например INSERT или DELETE, который делает недействительным кеш запроса, SELECT, который ищет кешированную запись, RESET QUERY CACHE и т. Д.
Это определенно огромная проблема с таблицами InnoDB, потому что механизмы InnoDB делают вторжения в кеше запросов. Я писал об этом явлении раньше
Sep 05, 2012
: https://dba.stackexchange.com/questions/23699/is-the-overhead-of-frequent-query-cache-invalidation-ever-worth-it/23727#23727Sep 26, 2013
: https://dba.stackexchange.com/questions/50290/query-cache-hit-value-is-not-changing-in-my-database/50535#50535У вас есть несколько вариантов в этом
Вы можете полностью отключить кеш запросов
SET GLOBAL query_cache_size = 0;
Если после этого все запросы к таблицам InnoDB будут удовлетворительными, добавьте это в my.cnf
[mysqld]
query_cache_size = 0;
Если вам действительно нужен больший кеш запросов, возможно, вам следует установить ограничения на размер записей.
Изменение этих параметров может позволить вам указать минимальное количество записей в кэше запросов.
Например, если вы установите следующие
[mysqld]
query_cache_size = 2G
query_cache_min_res_unit = 64M
query_cache_limit = 128M
Это ограничит количество записей кеша запросов.
Если вы действительно знаете свою рабочую нагрузку по данным и пропускную способность, вы можете поэкспериментировать с ограничениями.
Включение MySQL query_cache_size Innodb Lock безопасно?
Да, это так. Фактически, InnoDB может стать настоящим фанатом контроля в этом отношении, если вы сделаете Query Cache слишком большим. Хотя общий ответ для этого - оставить query_cache_size = 0, можно разумно изменить его размер для вашего набора данных и рабочей нагрузки.