Вводная:
сервер 8гб озу, 2* hdd 7200rpm, ext4
percona 5.6.24-72.2-log, таблица с текстами 40Gb 9мил записей.
CREATE TABLE `tmp_news` (
`guid` CHAR(50) NOT NULL,
`s_id` INT(10) UNSIGNED NOT NULL,
`title` VARCHAR(250) NOT NULL,
`text` TEXT NOT NULL,
`date` DATETIME NOT NULL,
`category_id` INT(11) UNSIGNED NOT NULL,
`rating` TINYINT(1) NULL DEFAULT NULL,
`frating` TINYINT(1) NULL DEFAULT NULL,
`trating` TINYINT(1) NULL DEFAULT NULL,
PRIMARY KEY (`guid`),
INDEX `i3` (`category_id`, `source_id`),
INDEX `i4` (`emote`),
INDEX `i2` (`date`, `category_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
Если добавление и обновление таблицы происходит достаточно быстро, то выборка - нет.Происходит это не всегда, а закономерность определить не получилось. Один и тот же запрос в разные моменты времени может выполняться 2 секунды и 40.
Если в момент выполнения "повисшего" запроса выполнить iotop, то увидим процесс mysql который на 99% занимает IO чтением с диска.
EXPLAIN запросов показывает, что все запросы покрыты индексами и в процессе выполнения не затрагивается более 3-4 тысяч строк.
Очень хочется уйти от 40 секунд, подскажите в каком направлении идти? (аппаратных изменений, настройски системного ПО, или формирования запросов)?