Я тестирую скорость некоторых запросов в MySQL. База данных кэширует эти запросы, что затрудняет получение надежных результатов при проверке того, насколько быстрыми являются эти запросы.
Есть ли способ отключить кеширование для запроса?
Система: MySQL 4 на веб-хостинге Linux, у меня есть доступ к PHPMyAdmin.
Спасибо
Попробуйте использовать параметр SQL_NO_CACHE (MySQL 5.7) в вашем запросе. (Пользователи MySQL 5.6 нажимают ЗДЕСЬ)
например.
SELECT SQL_NO_CACHE * FROM TABLE
Это остановит MySQL кэширование результатов, однако имейте в виду, что другие кеши ОС и дисков могут также влиять на производительность. Это сложнее обойти.
Другая альтернатива, которая влияет только на текущее соединение:
SET SESSION query_cache_type=0;
query_cache_size
я смотрел, не query_cache_type
. Я перепутал ваш ответ с ответом SeniorDev.
Любая ссылка на текущую дату/время отключит кеш запросов для этого выбора:
SELECT *,NOW() FROM TABLE
См. "Предварительные требования и примечания для использования кеша запросов MySQL" @http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html
Существует также опция конфигурации: query_cache_size = 0
Чтобы отключить кеш запросов при запуске сервера, установите системную переменную query_cache_size равной 0. Отключив код кеша запроса, заметных накладных расходов нет. Если вы создаете MySQL из источника, возможности кеша запросов могут быть полностью исключены из сервера, вызывая configure с параметром --without-query-cache.
Вы также можете запустить следующую команду для reset кеша запросов.
RESET QUERY CACHE
Одна проблема с
SELECT SQL_NO_CACHE * FROM TABLE
метод заключается в том, что он только предотвращает кэширование результата вашего запроса. Однако, если вы запрашиваете базу данных, которая активно используется с запросом, который вы хотите протестировать, другие клиенты могут кэшировать ваш запрос, влияя на ваши результаты. Я продолжаю исследовать пути вокруг этого, отредактировал бы этот пост, если бы понял его.
Я бы использовал следующее:
SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
Использование пользовательской переменной в запросе делает запрос результирующим необратимым. Я нашел его гораздо лучше, чем с помощью SQL_NO_CACHE
. Но вы должны поместить переменную в место, где параметр переменной не будет серьезно влиять на производительность:
SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
SQL_NO_CACHE
». Как так? Похоже, вам понадобится довольно веский аргумент для использования скрытого хака по явному ключевому слову, если только явное ключевое слово не выполняет то, что заявлено.
Если вы хотите отключить кеш запросов, установите 'query_cache_size' в 0 в конфигурационном файле mysql. Если его набор 0 mysql не будет использовать кеш запросов.