Секционирование таблиц не лечит всё: где оно реально ускоряет, а где только усложняет жизнь
Коллеги, давайте разберем план выполнения. Partitioning полезен, когда запросы стабильно отсекают крупные куски данных: по дате, tenant_id, статусу. Тогда оптимизатор может сделать pruning и не трогать лишние секции. Но если фильтр размыт, секционирование превращается в дорогую табличку с множеством маленьких таблиц и таким же количеством головной боли.
Что проверять до внедрения:
— как именно читают данные: по одному ключу или по диапазону;
— есть ли у запросов предсказуемый критерий отбора;
— не ломает ли схема JOIN’ы, UNIQUE-ограничения и массовые INSERT’ы;
— как будет жить статистика по секциям и сколько времени займут maintenance-операции.
Отдельный риск — слишком мелкие секции. Посмотрим, что тут с I/O в реальности: если планировщик перебирает десятки partition’ов, выигрыш от pruning легко съедается overhead’ом на планирование, открытие объектов и работу с каталогом. Особенно неприятно, когда таблица растет, а шаблон запросов никто не пересматривал.
Золотое правило: сначала мониторинг, потом индексы. Секционирование имеет смысл, когда оно решает конкретную проблему — архивирование, быстрый purge, локализацию горячих данных. Если цель просто «чтобы было красиво и по-взрослому», в продакшене так лучше не делать, и вот почему...
Оптимизация производительности баз
@database_performance_tuning_arb
Секционирование таблиц не лечит всё: где оно реально ускоряет, а где только усложняет жизнь
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.