Часть запросов которые вы показали - не очень шибко то поддаются оптимизации.
Например вот этот...
SELECT REPLACE(REPLACE(`text`, SSS, 'SSS SSS') AS `text`, `attribute_id`, COUNT( DISTINCT `tmp`.`product_id` ) AS `total` FROM( SELECT `pa`.`attribute_id`,`p`.`product_id`,`pa`.`text` FROM `df_product` AS `p` INNER JOIN `df_product_attribute` AS `pa` ON `pa`.`product_id` = `p`.`product_id` AND `pa`.`language_id` = NNN INNER JOIN `df_product_to_store` AS `p2s` ON `p2s`.`product_id` = `p`.`product_id` AND `p2s`.`store_id` = NNN INNER JOIN `df_product_to_category` AS `p2c` ON `p2c`.`product_id` = `p`.`product_id` WHERE `p`.`status` = NNN AND `p`.`date_available` <= NOW() AND `p2c`.`category_id` IN(XXX...XXX) ) AS `tmp` GROUP BY `text`, `attribute_id`
Связано это с особенностями работы оптимизатора mysql с индексами на JOIN выборках, а также невозможностью быстрой работы mysql с полнотекстовыми данными. Здесь конкретно группировка по текстовому полю значений атрибутов - и это НЕ ОПТИМИЗИРУЕТСЯ простыми методами, типа индексов наставили и полетело.
Если у вас подобные всплески происходят нерегулярно - лучше попробуйте найти что их вызывает - это могут быть паразитные боты к примеру, и попробуйте от них избавится.