Я запускаю выделенный сервер 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'
Я очень удивлен, что для такого простого запроса у меня появилось так много длинных запросов без блокировки. Fyi, таблица - это 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