MySql Innodb表奇怪选择锁定/超时

MySql Innodb表奇怪选择锁定/超时,mysql,select,locking,timeout,innodb,Mysql,Select,Locking,Timeout,Innodb,Innodb表中的SELECT出现了一个奇怪的问题,它永远不会返回,我等了两个多小时才看到结果,但没有,还在等 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

Innodb表中的SELECT出现了一个奇怪的问题,它永远不会返回,我等了两个多小时才看到结果,但没有,还在等

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)
现在我迷路了,用完全相同的查询(相同的位置和限制)分别获取id或文本列是如何完美地工作的,而不是同时获取它们呢

再次执行“selectid,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)

我找到了我自己问题的答案,我想在这里分享,因为这很奇怪,至少对我来说是这样

我一直认为mysql客户端在每次查询后返回的时间延迟(例如“集合中的120行(0.27秒)”)是mysql服务器生成该结果所需的时间,但不是

问题是网络问题!与mysql服务器没有任何关系


因此,我发现,与我一直认为的相反,mysql客户端显示的每个查询之后的时间包括网络延迟。来自与mysql服务器位于同一数据中心的服务器的同一时间请求和来自另一个国家的服务器的同一时间请求返回的时间不同(相当不同)。

我找到了我自己问题的解决方案,我想在这里分享,因为这很奇怪,至少对我来说是这样

我一直认为mysql客户端在每次查询后返回的时间延迟(例如“集合中的120行(0.27秒)”)是mysql服务器生成该结果所需的时间,但不是

问题是网络问题!与mysql服务器没有任何关系


因此,我发现,与我一直认为的相反,mysql客户端显示的每个查询之后的时间包括网络延迟。与mysql服务器位于同一数据中心的服务器在同一时间发出相同的请求,而来自另一个国家/地区的服务器在不同的时间返回相同的请求(考虑到不同)。

告诉我们更多关于数据库的并发上下文的信息Hi Sebas,请参阅我刚才添加的信息,看起来不是事务/锁相关的问题。此外,目前没有其他进程查询数据库,只有控制台上的我在尝试调试。请尝试增加innodb缓冲池。我在该mysql服务器上没有管理员权限。我在这里粘贴了一些关于Innodb缓冲池的信息:|页面|数据| 487 |页面|脏| 0 |页面|刷新| 286396 |页面|免费| 0 |页面|杂项| 25 |页面|总计| 512 | | |页面|提前阅读| rnd | 27723 |阅读| 21 |247542086 | | | | | | | | | | |读| 1472157 | | | | | | | |等|免费| 0 | | | | | | | | | |写|请求| 3813944。此外,目前没有其他进程查询数据库,只有控制台上的我在尝试调试。请尝试增加innodb缓冲池。我在该mysql服务器上没有管理员权限。我在这里粘贴了一些关于Innodb缓冲池的信息:|页面|数据| 487 |页面|脏| 0 |页面|刷新| 286396 |页面|免费| 0 |页面|杂项| 25 |页面|总计| 512 | | |页面|提前阅读| rnd | 27723 |阅读| 21 |247542086 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!是的,我觉得假设你的服务器是本地的有点傻,因为如果不是,这是显而易见的!