модуль 2 из 6 · Акт II · ~30 мин · 7 решений
сцена
Пятница, восемь вечера. Иван уже застёгивает куртку, когда в общий чат падает график без единой подписи — Тимур любит так делать.
Красная линия — p99 записи заказа. В августе было сорок миллисекунд. Сегодня — восемьсот. В двадцать раз, за полтора месяца. И да, прежде чем спросишь: код оформления заказа никто не трогал. Ни строчки.
А я вижу это с другой стороны прилавка. Пятница, все закупаются к выходным, покупатель жмёт «оформить» — и крутится спиннер. Половина не дожидается. Мы теряем деньги ровно в тот час, когда их больше всего.
Ну так база задыхается — значит, мало ей мощности. Докинем серверу процессоров и памяти, и дело с концом. Апрель же так пережили.
Апрель пережили на вдвое меньших данных. Сейчас в таблице заказов сорок миллионов строк — и каждый день прибавляется. И тормозит именно запись, не чтение. Процессор при этом скучает на тридцати процентах — ему нечем себя занять.
(глядя на карту) Смотрите, что получается. Код не менялся, данных стало больше, тормозит запись, а CPU простаивает. Значит, дело не в нашем коде и не в нехватке мощности. Дело в том, как база кладёт данные на диск. Пора спуститься на этаж ниже — туда, где живёт сам движок хранения.
Иван открывает страницу таблицы orders в админке. Индексов на ней — восемь штук.
Код оформления не менялся. Запись стала в двадцать раз медленнее — при данных всего вдвое больших.