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;