【问题标题】:MySQL CachingMySQL缓存
【发布时间】:2011-04-08 06:32:38
【问题描述】:

昨晚我在 mySQL 数据库中的存储过程中添加了一个参数。我访问了它,弄乱了参数,并决定再次删除该参数以进行测试。在没有参数的情况下重新创建过程后几分钟,我的命令对象仍在抱怨缺少参数。这是 mySQL、MySQL/Connector、ADO 或 Enterprise 库的问题吗?我该怎么办?

【问题讨论】:

标签: .net mysql database enterprise-library


【解决方案1】:

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

SHOW VARIABLES LIKE 'query_cache%'

存储过程调用不会被 MySQL 缓存,但如果 query_cache_type 为 ON,这将影响从过程中发出的查询的缓存。可能导致 MySQL 在几分钟内返回相同的结果。尝试刷新缓存,或者更好的是,如果您更新的过程一直返回之前的结果集,则重置查询缓存以删除所有查询:

RESET QUERY CACHE 

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

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

编辑:请阅读以下 cmets,作者为 desertwebdesign。重新创建存储过程后,断开连接。连接池可能会保持连接打开,因此最好从 MySQL 中终止连接。大多数查询浏览器都有一个选项卡,如果您使用进程/超级权限登录,则允许您终止 MySQL 中的连接。

SHOW FULL PROCESSLIST
KILL CONNECTION thread_id

【讨论】:

  • 查询缓存与过程缓存不同。没有 MySQL 变量/函数来控制过程缓存。重新加载它的唯一方法是使其无效。这只会在使用 ALTER PROCEDURE 命令删除、添加或更改过程时发生(这不允许您更改过程的主体)。假设您不使用池或持久连接,缓存将在您的下一个连接上重建。如果您在 mysql.proc 表上运行 UPDATE 以更改正文,我认为这不会使缓存无效。我需要先阅读更多的源代码。
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2014-06-25
  • 2019-07-23
  • 2010-09-07
  • 2015-09-12
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多