2011-11-23 67 views
6

我有很慢的查询(实际上这是从mysql.dump加载数据)。现在我想检查已经加载了多少行。暂停并恢复运行mysql查询

select count(*) from my_table; 

至于数据加载,my_table被锁定,所以装载转储前,我不能执行该SQL。

Cmd  ID State    User Host   DB  Time Query       
Query  191 update    root localhost  rehub 00:09 INSERT INTO `my_table` VALUES ... 
Query  189 Waiting for table root localhost  rehub 06:25 select count(*) from my_table 

那么有没有办法暂停查询191,执行查询189,然后恢复查询191?

+0

我猜你可以在information_schame.tables上试试你的运气吗? – ajreal

+0

使用Oracle,其中“编写者从不阻止读者”;) –

+1

是否有可能更改转储选项?如果是这样,你使用'-extended-insert'吗?然后'-extended-insert = FALSE'可以帮助,但会减慢导入。 –

回答

4

不,没有办法暂停查询。

如果您正在执行批量加载工作,则可能需要使用每隔数千行提交的批量加载器。

另外,使用MyISAM而不是InnoDB可以缓解这个问题。对于批量处理而言,MyISAM是一个不错的选择,您不必担心事务完整性。

0

可以使用show innodb status

2

要从manual报价仍然得到插入的记录数:

所有这些--opt代表还选项是在默认情况下 因为--opt默认开启。

所以,当你添加–-extended-insert=FALSE--add-locks=FALSE你的SELECT COUNT(*)应该工作的mysqldump的选项。根据您的情况,小心数据库的参照完整性问题。它会减慢进口速度!