2011-11-21 60 views
1

我有一个查询,它需要很长时间才能运行,但最终会生成一个新表。实际的连接并不是那么慢,但它几乎将所有时间都花在“复制到tmp表”上,在此期间所有其他查询(应该转到无关表)的状态都是“锁定的”。我正在优化长查询的过程,但它可能需要一段时间,因为它是一个离线的过程,但它不适合停止所有其他不应与其相关的查询。有谁知道为什么所有其他无关的查询会回复为“锁定”,以及如何防止这种行为?复制tmp表时MySQL'锁定'进程

+0

MySQL在复制过程中不会锁定所有表格,只会在复制过程中锁定所有表格。显示一些查询将有所帮助。也许你有一些索引/外键问题会锁定你认为不相关的表。 – Mikhail

回答

1

你是对的,“不相关的表”不应该受到影响。他们不应该,据我所知他们不是。

关于锁,存储引擎及其处理方法,关于MySQL有很多信息。

要限制锁定,我建议您编写一个应用程序,该应用程序读取执行此新表所需的所有数据,并让应用程序将值插入新表。这可能需要更长的时间,但它会以更小的块进行,并且锁或锁的数量较少。

祝你好运!

-1

什么是您的MySQL版本?

你使用MyISAM吗? MyISAM在大型SELECT命令上有一个很大的LOCK问题。

你有专门的服务器吗?内存表最大容量是多少(在my.cnf中查看)?

+0

-1因为它不是答案。以后会很高兴地宣布退出。 – Mikhail