MySQL - заставлять не использовать кеш для тестирования скорости запроса - PullRequest
306 голосов
/ 08 октября 2008

Я тестирую скорость некоторых запросов в MySQL. База данных кэширует эти запросы, что затрудняет получение надежных результатов при тестировании скорости выполнения этих запросов.

Есть ли способ отключить кэширование для запроса?

Система: MySQL 4 на хостинге Linux, у меня есть доступ к PHPMyAdmin.

Спасибо

Ответы [ 9 ]

491 голосов
/ 08 октября 2008

Попробуйте использовать опцию SQL_NO_CACHE (MySQL 5.7) в своем запросе. (Пользователи MySQL 5.6 нажимают ЗДЕСЬ )

например.

SELECT SQL_NO_CACHE * FROM TABLE

Это остановит MySQL кеширование результатов, однако имейте в виду, что другие ОС и дисковые кеши могут также влиять на производительность. Это сложнее обойти.

111 голосов
/ 15 июля 2011

Другая альтернатива, которая влияет только на текущее соединение:

SET SESSION query_cache_type=0;
53 голосов
/ 20 июня 2011

Любая ссылка на текущую дату / время отключит кэш запросов для этого выбора:

SELECT *,NOW() FROM TABLE

См. «Предварительные условия и примечания для использования MySQL Query Cache» @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

30 голосов
/ 24 марта 2011

Существует также опция конфигурации: query_cache_size = 0

Чтобы отключить кэш запросов при запуске сервера, задайте для системной переменной query_cache_size значение 0. При отключении кода кеша запросов заметных накладных расходов нет. Если вы строите MySQL из исходного кода, возможности кэширования запросов можно полностью исключить из сервера, вызвав команду configure с параметром --without-query-cache.

См. http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

24 голосов
/ 10 октября 2008

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

RESET QUERY CACHE
20 голосов
/ 11 августа 2009

Одна проблема с

SELECT SQL_NO_CACHE * FROM TABLE
Метод

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

13 голосов
/ 01 ноября 2013

Я бы использовал следующее:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
3 голосов
/ 14 января 2012

Использование пользовательской переменной в запросе приводит к тому, что результаты запроса не кэшируются. Я нашел его намного лучше, чем использовать SQL_NO_CACHE. Но вы должны поместить переменную в место, где установка переменной не окажет серьезного влияния на производительность:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
2 голосов
/ 17 марта 2009

Если вы хотите отключить кеш запросов, установите для параметра «query_cache_size» значение 0 в вашем файле конфигурации mysql. Если установлено 0, mysql не будет использовать кеш запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...