簡體   English   中英

MySql Innodb表奇怪的SELECT鎖/超時

[英]MySql Innodb table strange SELECT lock / timeout

我在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服務器位於同一數據中心的同一服務器上的同一時間所發出的相同請求,以及來自另一個國家/地區的另一個服務器所發出的相同請求,將返回不同的時間(相差很大)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM