2013-06-11 154 views
2

我有一个从各种资源中收集数据的mysql数据库。
为了显示来自不同表格的一些统计数据,我运行了一个长查询,大约需要几分钟才能执行。
查询锁定了一些表,因此我无法写入这些表。
这些表是InnoDB引擎。我试了几个选项,包括:
1.增加锁定超时
2.添加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;COMMIT;link
3.添加索引表(进行的查询的运行速度更快,但我仍然得到一个锁定超时错误)mysql - 长查询执行时间锁表

如何在不锁定表的情况下执行长查询?

+0

什么是查询? – Sebas

+0

这是一群SELECT年代,JOIN的,SUM和更多... –

+0

你肯定有一个锁?请'SHOW PROCESSLIST'和'SHOW ENGINE INNODB STATUS'。选择不锁定任何东西。但他们可能*等待*为锁释放 – Sebas

回答

1

从评论中Any way to select without causing locking in MySQL?

设置 “设置会话事务隔离级别读取承诺;”没有帮助。

设置“set session transaction isolation level readcommitted;”没有帮助。

使用任何一方的锁定表没有帮助。

在my.cnf中设置innodb_locks_unsafe_for_binlog = 1修复了这个问题,但我认为缺点是现在我无法在这个数据库中使用复制。

如果您不需要复制,那么我会尝试。

+0

不知道这是否可行。我从来没有一个问题用锁,我倾向于留出my.cnf中尽可能的。祝你好运! –