Mysql slow log длительный LOCK (10k sec)

146
02 мая 2019, 04:00

Есть таблица innodb с 4 млн записей.

CREATE TABLE `t1` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `hash` varchar(42) NOT NULL,
 `data` longtext,
 `lastupd` int(10) NOT NULL DEFAULT '0',
 `exp` bigint(20) unsigned DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `hash` (`hash`),
 KEY `lupd` (`lastupd`),
 KEY `exp` (`exp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Есть два типа запросов к ней (slow log):

Count: 206761  Time=0.07s (14853s)  Lock=0.04s (9031s)  Rows_sent=0.0 (0), Rows_examined=1.0 (201700), Rows_affected=0.8 (159815) 
UPDATE t1 SET data = 'S', expires = 'S', lastupd = 'S' WHERE hash = 'S';
Count: 20446  Time=0.28s (5660s)  Lock=0.00s (1s)  Rows_sent=0.0 (0), Rows_examined=0.0 (0), Rows_affected=1.0 (20446) 
INSERT INTO t1 SET hash = 'S', data = 'S', expires = 'S', lastupd = 'S'
ON DUPLICATE KEY UPDATE
data = 'S', expires = 'S', lastupd = 'S'

В случае UPDATE заметен очень долгий LOCK в запросах, а при INSERT все гладко. Данные за 8 часов, сл-но в минуту происходит примерно 450 запросов к таблице. Таблица не участвует в каких либо параллельных тяжелых запросах. Весит 13гб. В чем может быть проблема и как с этим бороться? Имеет ли смысл переносить таблицу в другую БД на том же диске или разбивать на 2 части (с редкообновляемыми (90%) и частообновляемыми данными (10%))

READ ALSO
MySQL автоинкремент пропуск Id

MySQL автоинкремент пропуск Id

Использую базу данных MySQL

122
Создание Базы данных и запросов к ней

Создание Базы данных и запросов к ней

Нужно создать БД в которой есть таблица Кружок( есть название, адрес, максколичество детей), таблица Тренер, который может вести несколько...

156
Удалить дату из строчного значения

Удалить дату из строчного значения

есть колонка с примерным значением "text-text-20-11-2018"Подскажите пожалуйста, как я могу удалить эту дату из конца строк в которых она есть (есть...

138