Что делать, если выросли базы данных до миллионов строк – масштабирование личных кабинетов

Что делать, если выросли базы данных до миллионов строк – масштабирование личных кабинетов

Ваш бизнес растёт. Вчера в базе было 100 заказов, сегодня — 100 тысяч, через месяц будет миллион. И тут вы замечаете, что отчёты стали грузиться по 30 секунд, а поиск по каталогу виснет. Типичная боль любого растущего проекта. Хорошая новость: Falcon Space и MS SQL Server могут работать с десятками миллионов записей, если правильно всё настроить.

В нашей практике были проекты с 12 миллионами строк в логовой таблице, с 5 миллионами товаров, с 2 миллионами заказов. Всё работало без подвисаний. Расскажу, как мы масштабируем проекты и что делать, если ваша база выросла.

Когда пора бить тревогу

Первые признаки:

Не пугайтесь. 100 тысяч строк — не предел. MS SQL Server может хранить до 524 петабайт. Ограничение не в объёме, а в скорости запросов.

Сколько записей выдерживает Falcon Space (реальные цифры)

Самый большой проект — лог-таблица с 12 млн записей (все действия пользователей за 3 года). Отчёты строились через агрегирующие процедуры. Всё работало при 2 ГБ RAM.

Шаг 1. Индексы — ваш главный инструмент

Как понять, каких индексов не хватает:

  1. Запустите в SQL Server Management Studio свой медленный запрос.
  2. Включите «Actual Execution Plan».
  3. Если видите значок «Missing Index» — SQL Server подскажет, какой индекс добавить.

Пример: если часто ищете заказы по дате, должен быть индекс на поле created_at. Если по клиенту + дате — составной индекс (client_id, created_at).

Индексы нужны на поля, участвующие в WHERE, JOIN, ORDER BY, GROUP BY. Но не перебарщивайте — каждый индекс замедляет вставку. Оптимально 5-10 индексов на таблицу.

Шаг 2. Оптимизация запросов

Пример: плохой запрос: SELECT * FROM orders o JOIN clients c ON o.client_id = c.client_id JOIN order_items oi ON o.order_id = oi.order_id. Хороший запрос: сначала отбираем заказы за период во временную таблицу, затем джойним.

Шаг 3. Архивация старых данных

Если в таблице 10 млн записей, а нужны только последние 1 млн, остальные 9 млн выгружаем в архивную таблицу. Это делается скриптом раз в месяц.

Пример: в проекте архивировали логи операций старше 2 лет. Основная таблица уменьшилась с 12 млн до 2 млн записей, отчёты ускорились в 20 раз.

Шаг 4. Апгрейд сервера (если ничего не помогает)

В 90% случаев проблема решается индексами и хорошими запросами.

Реальный пример: ускорение отчёта в 100 раз

У клиента отчёт по продажам за месяц строился 2 минуты. Не было индекса по дате на таблице заказов. Добавили индекс — стало 1,2 секунды. Заменили SELECT * на SELECT нужных колонок — стало 0,4 секунды.

Клиент был счастлив.

Миллионы строк — не страшно. Страшно, когда вы не знаете, что делать. Индексы, правильные запросы, архивация и чуть-чуть апгрейда сервера — и ваш сайт будет летать.

Страница-источник на сайте falconspace.ru