Почему mysql занимает очень много времени при вставке строк? - PullRequest
0 голосов
/ 14 января 2019

У меня есть код, который мне нужно вставить в таблицу MySQL. Я использую движок хранения innodb. Могут быть одновременные клиенты, вставляющие в таблицу раз. Мои запросы на вставку иногда занимают до 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);

медленные журналы запросов: # Query_time: 10.014465 Lock_time: 0.000035 Rows_sent: 0 Rows_examined: 0 вставить в значения test_con_insert (thread) (3833); 100 параллельных потоков, используемых для вставки в эту таблицу.4, захватывает медленный запрос.

...