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

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

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

Ниже приведены некоторые данные функционирования для кэша запросов (они получены во время работы тестового комплекта MySQL под Linux Alpha 2x500 МГц с 2Гб ОЗУ и 604-мегабайтным кэшем запросов):

  • Для блокировки кода кэша запросов необходимо установить query_cache_size=0. При отключении кода кэша запросов не наблюдалось заметных непроизводительных затрат (кэш запросов может быть исключен из кода с помощью параметра конфигурации --without-query-cache).
  • Если все производимые запросы являются простыми (такими как выбор строки из таблицы с одной строкой), но различаются настолько, что не могут быть кэшированы, непроизводительные затраты при активном состоянии кэша запросов составляют 13%. Это можно было бы рассматривать как сценарий наиболее неблагоприятного варианта. Однако в реальной жизни запросы более сложны, чем приведенный простой пример, так что непроизводительные затраты обычно значительно ниже.
  • Поиск строки в таблице с одной строкой происходит на 238% быстрее. Можно рассматривать эту величину, как близкую к минимальному увеличению быстродействия, ожидаемого при кэшировании запроса.

Главы