MySQL Caching
-
08-07-2019 - |
Вопрос
Прошлой ночью я добавил параметр в хранимую процедуру в базе данных mySQL. Я получил к нему доступ, испортил параметр и решил снова удалить этот параметр для тестирования. Через несколько минут после воссоздания процедуры без параметра мой командный объект все еще жаловался на отсутствующий параметр. Это ошибка MySQL, MySQL / Connector, ADO или библиотеки Enterprise, и что я могу с этим поделать?
Решение
По умолчанию MySQL кэширует запросы в ваших хранимых процедурах. Проверьте, включен ли Query Cache:
SHOW VARIABLES LIKE 'query_cache%'
Вызовы хранимых процедур не кэшируются MySQL, но если query_cache_type
включен, это повлияет на кеширование запросов, выполненных внутри процедуры. Возможно, заставляя MySQL возвращать те же результаты в течение пары минут. Попробуйте очистить кеш, или еще лучше, сбросьте кеш запросов, чтобы удалить все запросы, если ваша обновленная процедура продолжает возвращать предыдущий набор результатов:
RESET QUERY CACHE
Это должно устранить любое кэширование сервером MySQL.
В следующий раз вы можете выполнить процедуру вручную через другой инструмент, который не использует MySQL / Connector или Enterprise Library. Это скажет вам, кэшируется ли старый набор результатов MySQL или драйверами и блоками приложения в вашем приложении.
Изменить: , пожалуйста, прочитайте комментарии ниже, автор пустыня веб-дизайн. После воссоздания sproc сбросьте соединение. Пул соединений может держать соединение открытым, поэтому, вероятно, лучше убить соединение из MySQL. У большинства браузеров запросов есть вкладка, которая позволяет уничтожать соединения в MySQL, если вы входите в систему с привилегиями процесса / супер.
SHOW FULL PROCESSLIST
KILL CONNECTION thread_id