Spec-Zone .ru
спецификации, руководства, описания, API
|
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. (Прежде, чем MySQL 5.6.8, размер значения по умолчанию
будет 0 со значением по умолчанию query_cache_type
из 1.)
Чтобы уменьшить издержки значительно, также запустите сервер с 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
переменная влияет, как она работает. Эта переменная может быть
установлена в следующие значения:
Значение 0
или OFF
предотвращает кэширование или извлечение кэшируемых результатов.
Значение 1
или ON
позволяет кэшироваться кроме тех операторов, которые начинаются SELECT
SQL_NO_CACHE
.
Значение 2
или DEMAND
кэширование причин только тех операторов, которые начинаются SELECT
SQL_CACHE
.
Если 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
:
Значение по умолчанию query_cache_min_res_unit
4 Кбита. Это должно быть достаточным для
большинства случаев.
Если у Вас есть много запросов с маленькими результатами, размер блока значения по
умолчанию может привести к фрагментации памяти, как обозначено большим количеством свободных блоков.
Фрагментация может вынудить кэш запроса сократить (удаляют) запросы из кэша из-за нехватки памяти. В
этом случае уменьшите значение query_cache_min_res_unit
. Число свободных блоков и запросов,
удаленных из-за сокращения, дается значениями Qcache_free_blocks
и Qcache_lowmem_prunes
переменные состояния.
Если у большинства Ваших запросов есть большие результаты (проверьте Qcache_total_blocks
и Qcache_queries_in_cache
переменные состояния), можно увеличить
производительность, увеличиваясь query_cache_min_res_unit
. Однако, делайте все возможное не сделать
это слишком большим (см. предыдущий элемент).