Spec-Zone .ru
спецификации, руководства, описания, API

8.9.3.3. Конфигурация Кэша запроса

have_query_cache системная переменная сервера указывает, доступен ли кэш запроса:

mysql> SHOW VARIABLES LIKE 'have_query_cache';+------------------+-------+| Variable_name    | Value |+------------------+-------+| have_query_cache | YES   |+------------------+-------+

При использовании стандартного двоичного файла MySQL это значение всегда YES, даже если кэширование запроса отключается.

Несколько других системных переменных управляют работой кэша запроса. Они могут быть установлены в файле опции или на командной строке, запускаясь mysqld. Системные переменные кэша запроса у всех есть имена, которые начинаются query_cache_. Они описываются кратко в Разделе 5.1.4, "Системные Переменные Сервера", с дополнительной конфигурационной информацией, данной здесь.

Чтобы установить размер кэша запроса, установите query_cache_size системная переменная. Установка этого к 0 отключает кэш запроса, так что делает установку query_cache_type=0. По умолчанию кэш запроса отключается. Это достигается, используя размер значения по умолчанию 1M со значением по умолчанию для query_cache_type из 0.

Чтобы уменьшить издержки значительно, также запустите сервер с query_cache_type=0 если Вы не будете использовать кэш запроса.

Отметить

При использовании Windows Configuration Wizard, чтобы установить или сконфигурировать MySQL, значение по умолчанию для query_cache_size будет сконфигурирован автоматически для Вас основанный на различных доступных типах конфигурации. При использовании Windows Configuration Wizard кэш запроса может быть включен (то есть, установлен в ненулевое значение), из-за выбранной конфигурации. Кэшем запроса также управляет установка query_cache_type переменная. Проверьте значения этих переменных как набор Ваш my.ini файл после конфигурации имел место.

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

mysql> SET GLOBAL query_cache_size =
        40000;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> SHOW
        WARNINGS\G*************************** 1. row ***************************  Level: Warning   Code: 1282Message: Query cache failed to set size 39936;         new query cache size is 0mysql> SET GLOBAL query_cache_size = 41984;Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE 'query_cache_size';+------------------+-------+| Variable_name    | Value |+------------------+-------+| query_cache_size | 41984 |+------------------+-------+

Для кэша запроса, чтобы фактически быть в состоянии содержать любые результаты запроса, его размер должен быть установлен больше:

mysql> SET GLOBAL query_cache_size = 1000000;Query OK, 0 rows affected (0.04 sec)mysql> SHOW VARIABLES LIKE 'query_cache_size';+------------------+--------+| Variable_name    | Value  |+------------------+--------+| query_cache_size | 999424 |+------------------+--------+1 row in set (0.00 sec)

query_cache_size значение выровненное к самому близкому 1024-байтовому блоку. Значение, о котором сообщают, может поэтому отличаться от значения, которое Вы присваиваете.

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

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

Установка GLOBAL query_cache_type значение определяет поведение кэша запроса для всех клиентов, которые соединяются после того, как изменение производится. Отдельные клиенты могут управлять поведением кэша для своего собственного соединения, устанавливая SESSION query_cache_type значение. Например, клиент может отключить использование кэша запроса для его собственных запросов как это:

mysql> SET SESSION query_cache_type =
        OFF;

Если Вы устанавливаете query_cache_type при запуске сервера (а не во времени выполнения с a SET оператор), только числовые значения разрешаются.

Управлять максимальным размером отдельных результатов запроса, которые могут кэшироваться, набор query_cache_limit системная переменная. Значение по умолчанию составляет 1 МБ.

Бойтесь устанавливать размер слишком большого кэша. Из-за потребности в потоках, чтобы заблокировать кэш во время обновлений, можно видеть проблемы конкуренции за блокировку с очень большим кэшем.

Отметить

Можно установить максимальный размер, который может быть определен для кэша запроса во времени выполнения с SET оператор при использовании --maximum-query_cache_size=32M опция на командной строке или в конфигурационном файле.

Когда запрос должен кэшироваться, его результат (данные, отправленные клиенту), сохранен в кэше запроса во время извлечения результата. Поэтому данные обычно не обрабатываются в одном большом блоке. Кэш запроса выделяет блоки для того, чтобы хранить эти данные по требованию, так, когда один блок заполнен, новый блок выделяется. Поскольку работа выделения памяти является дорогостоящей (timewise), кэш запроса выделяет блоки с минимальным размером, данным query_cache_min_res_unit системная переменная. Когда запрос выполняется, последний блок результата обрезается к фактическому размеру данных так, чтобы неиспользованная память была освобождена. В зависимости от типов запросов выполняется Ваш сервер, Вы могли бы счесть полезным настроить значение query_cache_min_res_unit: