Кэш запросов SQL

Я знаю, что SQL-запрос будет использовать кеш запросов для получения данных вместо обработки всех данных. Вот вопрос, который я хотел бы задать,

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

Если я очищу кеш запросов пример с помощью FLUSH QUERY CACHE; или RESET QUERY CACHE;,

повлияет ли это на другого разработчика или он только очистит мой локальный кеш запросов?

Если это повлияет на других, есть ли способ очистить локально или разрешить мой запрос не будет использовать кеш запросов для тестирования

+5
источник поделиться
3 ответа

Два пояснения для начала:

  • Кэш запросов MySQL - это серверная функция, нет такой вещи, как "локальный кеш". Вероятно, вас смущает ключевое слово LOCAL в команде FLUSH. Поскольку docs объясняет это просто псевдоним для NO_WRITE_TO_BINLOG (таким образом, он связан с репликацией, а "локальный" означает "этот сервер" ).

  • MySQL будет возвращать только кешированные данные, если вы включили эту функцию и либо сделали ее по умолчанию, либо выбрали с помощью подсказки SQL_CACHE. По моему опыту, большинство серверов не имеют его по умолчанию.

Теперь давайте ответим на ваш вопрос. В Кэш-память MySQL можно прочитать:

Кэш запросов распределяется между сеансами, поэтому набор результатов, созданный один клиент может быть отправлен в ответ на тот же запрос, выданный другим клиент.

Что имеет смысл: кэш, который не может повторно использовать сохраненные данные, не так полезен.

Я не знаю, что вы хотите точно проверить. Ваши данные всегда должны быть свежими:

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

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

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

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

+2
источник

Попробуйте использовать параметр SQL_NO_CACHE в вашем запросе. Это остановит MySQL кэширование результатов

SELECT SQL_NO_CACHE * FROM TABLE
+1
источник

С SQL Server для кэшированных данных вы можете использовать DBCC DROPCLEANBUFFERS и заставить manul CHECKPOINT.

Однако он работает на уровне Server (instance):

Используйте DBCC DROPCLEANBUFFERS для проверки запросов с холодным кешем буфера без остановки и перезапуска сервера.

Чтобы удалить чистые буферы из пула буферов, сначала используйте CHECKPOINT для создания холодного кеша буфера. Это заставляет все грязные страницы для текущей базы данных записываться на диск и очищает буферы. После этого вы можете выполнить команду DBCC DROPCLEANBUFFERS, чтобы удалить все буферы из пула буферов.

отредактирован *

Кэш буфера запросов SQL является глобальным, но не локальным. Если кеш буфера или запроса падает, он удаляет его по всему миру и будет влиять на всех пользователей, использующих сервер базы данных.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос