2008-11-13 208 views
1

昨晚我在mySQL数据库的存储过程中添加了一个参数。我访问它,搞砸了参数,并决定再次删除参数,进行测试。在没有参数的情况下重新创建过程之后的几分钟内,我的命令对象仍然抱怨缺少参数。这是mySQL,MySQL /连接器,ADO或企业库的错,我能做些什么呢?MySQL高速缓存

+0

另见:http://stackoverflow.com/questions/2923979/is-mysql-caching-occurring-how-to-fix-it如果你没有MySQL的权限。 – 2010-05-27 23:15:29

回答

1

默认情况下,MySQL会在您的存储过程中缓存查询。查看是否已启用查询缓存:

SHOW VARIABLES LIKE 'query_cache%' 

存储过程调用不是由MySQL缓存,但如果query_cache_type为ON,这将影响从过程中发出的查询缓存。可能导致MySQL在几分钟内返回相同的结果。尝试清空缓存,或者更好,重置查询缓存,如果你的更新程序保存返回先前的结果集删除所有查询:

RESET QUERY CACHE 

这应该消除MySQL服务器的任何缓存。

下次发生这种情况时,您可以通过另一个不使用MySQL/Connector或Enterprise Library的工具手动执行该过程。这会告诉你旧的结果集是由MySQL还是应用程序中的驱动程序和应用程序块缓存的。

编辑:请阅读下面的评论,通过desertwebdesign。重新创建sproc后,放下连接。连接池可能会保持连接处于打开状态,所以最好从MySQL中终止连接。大多数查询浏览器都有一个选项卡,如果您使用进程/超级特权登录,则允许您终止MySQL中的连接。

SHOW FULL PROCESSLIST 
KILL CONNECTION thread_id 
+1

QUERY CACHE与过程高速缓存不同。没有MySQL变量/函数来控制过程缓存。重新加载它的唯一方法是使其无效。这只会在使用ALTER PROCEDURE命令删除,添加或更改过程时发生(不允许您更改过程的主体)。假设您不使用池或持久连接,缓存将在您的下一个连接上重建。如果你在mysql.proc表上运行UPDATE来更改主体,我认为不会使缓存失效。我需要先阅读更多源代码。 – desertwebdesigns 2011-01-20 22:08:55