Оптимизация производительности баз

Секционирование таблиц не лечит всё: где оно реально ускоряет, а где только усложняет жизнь

Секционирование таблиц не лечит всё: где оно реально ускоряет, а где только усложняет жизнь

Коллеги, давайте разберем план выполнения. Partitioning полезен, когда запросы стабильно отсекают крупные куски данных: по дате, tenant_id, статусу. Тогда оптимизатор может сделать pruning и не трогать лишние секции. Но если фильтр размыт, секционирование превращается в дорогую табличку с множеством маленьких таблиц и таким же количеством головной боли.

Что проверять до внедрения:
— как именно читают данные: по одному ключу или по диапазону;
— есть ли у запросов предсказуемый критерий отбора;
— не ломает ли схема JOIN’ы, UNIQUE-ограничения и массовые INSERT’ы;
— как будет жить статистика по секциям и сколько времени займут maintenance-операции.

Отдельный риск — слишком мелкие секции. Посмотрим, что тут с I/O в реальности: если планировщик перебирает десятки partition’ов, выигрыш от pruning легко съедается overhead’ом на планирование, открытие объектов и работу с каталогом. Особенно неприятно, когда таблица растет, а шаблон запросов никто не пересматривал.

Золотое правило: сначала мониторинг, потом индексы. Секционирование имеет смысл, когда оно решает конкретную проблему — архивирование, быстрый purge, локализацию горячих данных. Если цель просто «чтобы было красиво и по-взрослому», в продакшене так лучше не делать, и вот почему...
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.