MySQL - заставить не использовать кеш для проверки скорости запроса

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

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

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

Спасибо

Ответ 1

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

например.

SELECT SQL_NO_CACHE * FROM TABLE

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

Ответ 2

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

SET SESSION query_cache_type=0;

Ответ 3

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

SELECT *,NOW() FROM TABLE

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

Ответ 4

Существует также опция конфигурации: 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

Ответ 5

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

RESET QUERY CACHE

Ответ 6

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

SELECT SQL_NO_CACHE * FROM TABLE

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

Ответ 7

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

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

Ответ 8

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

Ответ 9

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

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;