Skip to content

OPS-7: Партиционирование / архивация stock_movements #100

Description

@ii-reviewer

Цель: таблица движений растёт неограниченно — нужно секционировать по времени (или архивировать старое), чтобы запросы истории и вставки не деградировали.
Зависимость: PERF-1.

Что сделать

  • Выбрать стратегию: range-партиционирование stock_movements по created_at помесячно либо вынос старых записей в stock_movements_archive с ретеншном.
  • Для партиционирования:
    CREATE TABLE stock_movements (...)
      PARTITION BY RANGE (created_at);
    CREATE TABLE stock_movements_y2026m06
      PARTITION OF stock_movements
      FOR VALUES FROM ('2026-06-01') TO ('2026-07-01');
  • Продумать автосоздание будущих партиций (джоба/pg_partman) и индексы на партициях (item_id, created_at).
  • Учесть PK: при партиционировании ключ должен включать created_at.
  • Стретч: миграция уже существующих данных в партиционированную таблицу без простоя (новая таблица → перелив батчами → переключение), оценить влияние на запрос истории (Просмотр истории товара (движение товара) #8) и отчёт low-stock.

Acceptance criteria

  • Движения пишутся в партицию/таблицу по месяцу created_at.
  • Запрос истории по item_id использует partition pruning (EXPLAIN ANALYZE бьёт по нужным партициям).
  • Есть механизм появления новой партиции до начала следующего месяца.
  • Существующие данные мигрированы без потери и без долгого эксклюзивного лока; Просмотр истории товара (движение товара) #8 возвращает прежние результаты.

Metadata

Metadata

Assignees

No one assigned

    Labels

    performanceПроизводительность

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions