Говорят, что если усадить миллион обезьян за печатные машинки, то с ненулевой вероятностью одна из них наберет «Войну и мир». У одной обезьяны, похоже, получился CMS.
Отдел поддержки клиентских серверов датацентра. Приходит клиентское письмо с жалобой: «После обновлений базы товаров нашего интернет-магазина сайт перестаёт работать и вообще». Сайт вольготно размещён в одиночку на сервере с двухъядерным процессором и 2 ГБ памяти — проблем с производительностью быть не должно. Прошу пнуть нас именно в момент обновлений.
Дожидаюсь ответа «вот сейчас не работает!» Смотрю — на машине оба ядра под завязку нагрузил MySQL. Логинюсь в «мускуль», даю запрос show full processlist. Изумляюсь — терминал виснет наглухо. Передёрнув терминал и залогинившись обратно на машину, запускаю тот же запрос с выводом в файл. Смотрю в результаты: сервер отрабатывает два запроса общей длиной в 1,2 с копейками мегабайта.
Как выяснилось, чудо-фронтэнд магазина выгребал какие-то данные запросом вида «Select * from Таблица where productID='такой-то' and enabled=1 or productID='еще_какойто' and enabled=1 or...», и так до упора. Несчастный MySQL вдумчиво проверял каждую строку немаленькой таблицы на соответствие десяткам тысяч логических условий.
Клиенту отписал, приложив результаты show full processlist. Молчит уже сутки. Видимо, проникается идеей...