модуль 2 из 6 · Акт II · ~30 мин · 7 решений

сцена

Пятница, восемь вечера. Иван уже застёгивает куртку, когда в общий чат падает график без единой подписи — Тимур любит так делать.

Тимур
Тимур

Красная линия — p99 записи заказа. В августе было сорок миллисекунд. Сегодня — восемьсот. В двадцать раз, за полтора месяца. И да, прежде чем спросишь: код оформления заказа никто не трогал. Ни строчки.

Лера
Лера

А я вижу это с другой стороны прилавка. Пятница, все закупаются к выходным, покупатель жмёт «оформить» — и крутится спиннер. Половина не дожидается. Мы теряем деньги ровно в тот час, когда их больше всего.

Гена
Гена

Ну так база задыхается — значит, мало ей мощности. Докинем серверу процессоров и памяти, и дело с концом. Апрель же так пережили.

Тимур
Тимур

Апрель пережили на вдвое меньших данных. Сейчас в таблице заказов сорок миллионов строк — и каждый день прибавляется. И тормозит именно запись, не чтение. Процессор при этом скучает на тридцати процентах — ему нечем себя занять.

Иван
Иван

(глядя на карту) Смотрите, что получается. Код не менялся, данных стало больше, тормозит запись, а CPU простаивает. Значит, дело не в нашем коде и не в нехватке мощности. Дело в том, как база кладёт данные на диск. Пора спуститься на этаж ниже — туда, где живёт сам движок хранения.

Иван открывает страницу таблицы orders в админке. Индексов на ней — восемь штук.

одна база под всем монолитом
insert · p99 ×20заказыпоток записи в пикпрочие 5 модулейкаталог, цены, доставка…postgresqlодна база · 40 млн заказовp99 записи: 40 мс → 800 мс

Код оформления не менялся. Запись стала в двадцать раз медленнее — при данных всего вдвое больших.

← карта