Простой запрос UPDATE с (иногда) длительным временем запроса
Я запускаю выделенный сервер MySQL (2 ядра, 16 ГБ ОЗУ), обслуживающий 100-200 запросов в секунду. Это становится вялым во время пика трафика, и мне трудно оптимизировать сервер. Итак, я ищу некоторые идеи сейчас, когда я выполнил много тонких настроек Innodb с помощью "TUNING PRIMER"
Запрос, который теперь генерирует самые медленные запросы, выглядит следующим образом (см. Результат из mysqldumpslow):
Count: 433 Time=3.40s (1470s) Lock=0.00s (0s) Rows=0.0 (0),
UPDATE user_sessions SET tid='S' WHERE idsession='S'
Я очень удивлен, что у меня так много длинных запросов для такого простого запроса без блокировки. Кстати, таблица InnoDB и имеет 14000 строк. Он содержит все активные сеансы на сайте с примерно 10 попаданиями UPDATE и SELECT в секунду. Вот его структура:
CREATE TABLE `user_sessions` (
`personid` mediumint(9) NOT NULL DEFAULT '0',
`ip` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
`idsession` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`datum` date NOT NULL DEFAULT '0000-00-00',
`tid` time NOT NULL DEFAULT '00:00:00',
`status` tinyint(4) NOT NULL DEFAULT '0',
KEY `personid` (`personid`),
KEY `idsession` (`idsession`),
KEY `datum` (`datum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Есть идеи?
РЕДАКТИРОВАТЬ
Вот что я получаю, когда активирую профилирование по этому запросу:
Status Duration
starting 0.000049
checking permissions 0.000009
Opening tables 0.000028
System lock 0.000010
init 0.000079
Updating 0.030386
end 0.000007
Waiting for query cache lock 0.000005
end 0.002654
query end 0.000035
closing tables 0.000012
freeing items 0.000022
logging slow query 0.000005
cleaning up 0.000005