gpt4 book ai didi

MySql Innodb 表奇怪 SELECT 锁定/超时

转载 作者:行者123 更新时间:2023-11-29 00:32:20 25 4
gpt4 key购买 nike

我在 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)

现在我迷路了,如何使用完全相同的查询(相同的 WHERE 和 LIMIT)分别获取 id 或 text 列工作完美,然后又不获取它们?

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

最佳答案

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

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

问题是网络问题!与mysql服务器完全没有关系!

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

关于MySql Innodb 表奇怪 SELECT 锁定/超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com