Вчера вечером я добавил параметр к хранимой процедуре в базе данных mySQL. Я получил к нему доступ, испортил параметр и решил снова удалить параметр для тестирования. Через несколько минут после воссоздания процедуры без параметра мой командный объект все еще жаловался на отсутствующий параметр. Является ли это ошибкой библиотеки mySQL, MySQL / Connector, ADO или Enterprise и что я могу с этим поделать?





По умолчанию MySQL кэширует запросы в ваших хранимых процедурах. Посмотрите, включен ли кэш запросов:
SHOW VARIABLES LIKE 'query_cache%'
Вызовы хранимых процедур не кэшируются MySQL, но если query_cache_type включен, это повлияет на кэширование запросов, отправленных из процедуры. Возможно, MySQL вернет те же результаты в течение нескольких минут. Попробуйте очистить кеш или, еще лучше, сбросить кеш запросов, чтобы удалить все запросы, если ваша обновленная процедура продолжает возвращать предыдущий набор результатов:
RESET QUERY CACHE
Это должно устранить любое кеширование сервером MySQL.
В следующий раз, когда это произойдет, вы можете выполнить процедуру вручную с помощью другого инструмента, который не использует MySQL / Connector или Enterprise Library. Это скажет вам, кэшируется ли старый набор результатов MySQL или драйверами и блоками приложений в вашем приложении.
Редактировать:, пожалуйста, прочтите комментарии ниже, от desertwebdesign. После воссоздания sproc отключите соединение. Пул соединений может поддерживать соединение открытым, поэтому, вероятно, лучше всего отключить соединение от MySQL. В большинстве браузеров запросов есть вкладка, которая позволяет отключать соединения в MySQL, если вы входите в систему с привилегиями процесса / суперпользователя.
SHOW FULL PROCESSLIST
KILL CONNECTION thread_id
КЭШ ЗАПРОСОВ НЕ то же самое, что кеш процедур. Не существует переменной / функции MySQL для управления кешем процедур. Единственный способ перезагрузить его - сделать его недействительным. Это произойдет только тогда, когда процедура будет удалена, добавлена или изменена с помощью команды ALTER PROCEDURE (которая не позволяет вам изменять тело процедуры). Кеш будет перестроен при следующем подключении, если вы не используете пул или постоянные подключения. Если вы выполнили UPDATE в таблице mysql.proc, чтобы изменить тело, я не думаю, что это делает кеш недействительным или нет. Сначала мне нужно прочитать больше исходного кода.
Также см .: stackoverflow.com/questions/2923979/…, если у вас нет привилегий MySQL.