Spec-Zone.ru › MySQL 5.7

8.10.3 Кэш запросов MySQL

  • 8.10.3.1 Как работает кэш запросов
  • 8.10.3.2 Параметры кэширования для запросов SELECT
  • 8.10.3.3 Настройка кэша запросов
  • 8.10.3.4 Статус и обслуживание кэша запросов
Примечание

Кэш запросов устарел начиная с MySQL 5.7.20 и удалён в MySQL 8.0.

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

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

Кэш запросов не возвращает устаревшие данные. При изменении таблиц все соответствующие записи в кэше запросов очищаются.

Примечание

Кэш запросов не работает в среде, где несколько серверов mysqld обновляют те же MyISAM таблицы.

Кэш запросов используется для подготовленных операторов в условиях, описанных в разделе 8.10.3.1 «Как работает кэш запросов».

Примечание

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

Ниже представлены некоторые данные о производительности кэша запросов. Эти результаты были получены путём выполнения набора тестов MySQL на системе Linux Alpha 2×500MHz с 2 ГБ оперативной памяти и 64 МБ кэшем запросов.

  • Если все выполняемые запросы простые (например, выбор строки из таблицы с одной строкой), но всё же отличаются так, что запросы не могут быть кэшированы, накладные расходы на включённый кэш запросов составляют 13%. Это можно считать худшим случаем. В реальной жизни запросы, как правило, намного сложнее, поэтому накладные расходы обычно значительно ниже.

  • Поиск одной строки в таблице с одной строкой в 238% быстрее с кэшем запросов, чем без него. Это можно считать близким к минимальному ожидаемому ускорению для кэшируемого запроса.

Чтобы отключить кэш запросов при запуске сервера, установите системную переменную query_cache_size в значение 0. Отключив код кэширования запросов, никакие заметные накладные расходы не наблюдаются.

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

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

  • Нагрузка сервера оказывает значительное влияние на эффективность кэша запросов. Комбинация запросов, состоящая почти полностью из набора фиксированных операторов SELECT, гораздо чаще принесёт пользу от включения кэша, чем комбинация, в которой частые операторы INSERT вызывают постоянное аннулирование результатов в кэше. В некоторых случаях можно использовать вариант SQL_NO_CACHE, чтобы предотвратить попадание результатов в кэш для операторов SELECT, использующих часто изменяемые таблицы. (См. раздел 8.10.3.2 «Параметры кэширования для запросов SELECT».)

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/query-cache.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API