我有一个查询需要很长时间才能运行,但最终会生成一个新表。实际的连接并没有那么慢,但它几乎将所有时间都花在“复制到 tmp 表”上,在此期间,所有其他查询(应该转到不相关的表)的状态都是“锁定”的。我正在优化长查询,但是因为它是一个离线过程,所以它需要一段时间是可以的,但是它不能停止所有其他不应该与之相关的查询。有谁知道为什么所有其他不相关的查询会以“锁定”的形式返回,以及如何防止这种行为?
问问题
1442 次
2 回答
1
你是对的,“不相关的表”不应该受到影响。他们不应该,据我所知,他们不是。
MySQL上有很多关于锁、存储引擎和处理方式的信息。
为了限制锁定,我建议您编写一个应用程序来读取执行此新表所需的所有数据,并让您的应用程序将值插入到新表中。这可能需要更长的时间,但它会以较小的块进行,并且具有更少或没有锁。
祝你好运!
于 2011-11-21T21:20:53.957 回答
-1
你的 MySQL 版本是多少?
你使用 MyISAM 吗?MyISAM 在大型 SELECT 命令上有很大的 LOCK 问题。
你有专门的服务器吗?内存表的最大大小是多少(查看 my.cnf)?
于 2011-11-21T21:13:25.620 回答