8.10.3 Кэш запросов MySQL
Кэш запросов устарел начиная с 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.