为什么mysql在插入行时需要很长时间?

时间:2019-01-14 10:55:06

标签: mysql innodb

我有一个代码需要插入到mysql表中。我正在使用innodb存储引擎。可能会有并发客户端插入到tableat时间。我的插入查询有时需要长达50秒的时间才能插入。我看到锁定时间很少,但是执行时间却很大。以下是慢查询日志中捕获的时间:

查询时间:51.106628锁定时间:0.000043发送的行数:0已检查的行数:0

任何人都可以解释一下mysql在表插入上花费了很多时间吗,通常在几毫秒左右的时间。

下面是我缩小的范围: 1.并发插入之间不能存在争用,因为mysql插入可以使用间隙锁,但是这里的表具有自动递增的主键。 2.我已设置在每次事务提交后刷新到磁盘的位置,因此不可能出现刷新可能滞后导致插入停止的情况。

我尝试保留两列表,其中一列是自动递增的PK,另一列只是一个字符串列。我运行了100个线程以插入到表中,而我的慢速查询日志捕获了很少的插入,大约需要10秒钟,而通常情况下插入需要花费几毫秒的时间,所以这似乎是偶尔出现慢速插入的普遍问题。

(来自评论)

偶尔的延迟问题也发生在非常简单的结构中。例如。

CREATE TABLE test_con_insert (
    id int(10) unsigned NOT NULL AUTO_INCREMENT, 
    thread int(11) DEFAULT NULL, 
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into test_con_insert (thread) values(1);

慢速查询日志:#查询时间:10.014465锁定时间:0.000035 Rows_sent:0 Rows_examined:0插入到test_con_insert(thread)值(3833);用于在此表中插入的100个并发线程。捕获了4个慢查询。

0 个答案:

没有答案
相关问题