我在Innodb表中有一个奇怪的问题与SELECT,它永远不会返回,我等了两个多小时,看看我得到的结果,但没有,仍在等待。MySql Innodb表奇怪的选择锁定/超时
CREATE TABLE `example` (
`id` int(11) NOT NULL,
`done` tinyint(2) NOT NULL DEFAULT '0',
`agent` tinyint(4) NOT NULL DEFAULT '0',
`text` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
KEY `da_idx` (`done`,`agent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
,我无法得到结果的查询是:
SELECT id, text FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
首先我想在某些指标优化或锁定的问题,我是一些时间研究这一点,但后来我发现这一点:
SELECT id FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
...
...
...
120 rows in set (0.27 sec)
SELECT text FROM example WHERE done = 0 AND agent = 0 LIMIT 120;
...
...
...
120 rows in set (0.83 sec)
现在我迷路了,怎么获得单独标识或文本列具有完全相同的查询(WHERE相同和限制)完美的作品,然后得到他们两个不是?
在两次查询后再次执行“SELECT id,text ...”具有相同的效果,永不返回。
任何帮助表示赞赏,一个InnoDB大师可以帮助;)
新增信息: 看起来不像一个交易锁定问题,看的响应时间为下一个查询的指数级增长:
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 109;
...
109 rows in set (0.31 sec)
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 110;
...
110 rows in set (3.98 sec)
SELECT id, text FROM example WHERE done = 0 AND agent = 0 limit 111;
...
111 rows in set (4 min 5.00 sec)
告诉我们关于你的数据库的并发上下文的更多信息 – Sebas 2013-04-11 19:41:48
嗨Sebas,请参阅我刚刚添加的信息,看起来不是交易/锁相关的问题。此外,现在没有其他进程正在查询数据库,只有我在控制台上试图对其进行调试。 – Lix 2013-04-11 20:34:18
尝试增加你的innodb缓冲池http://dev.mysql.com/doc/refman/4.1/en/innodb-buffer-pool.html – Sebas 2013-04-11 20:38:28