Секционирование не ускоряет всё подряд — сначала проверьте, что именно режете
Коллеги, давайте разберем план выполнения. Partitioning помогает, когда запросы почти всегда попадают в одну-две секции: тогда планировщик может отсечь лишнее, а вакуум/архивация работают с меньшими кусками данных.
Но есть типовые ошибки:
— секционируют по полю, которое в фильтрах не используется;
— ожидают ускорения от самого факта разбиения, хотя план все равно сканирует все секции;
— делают слишком мелкие секции и получают сотни объектов, лишний overhead на метаданных и планирование.
Посмотрим, что тут с I/O в реальности: если после секционирования запросы стали медленнее, проверьте pruning, статистику по секциям и размер каждой секции. Пустые или почти пустые секции тоже вредят — оптимизатор начинает работать не с данными, а с зоопарком объектов.
Золотое правило: сначала мониторинг, потом индексы. Секционирование оправдано для больших таблиц с естественным признаком времени, диапазона или tenant_id, но только если это признак реально участвует в WHERE, очистке и жизненном цикле данных. Иначе это просто дорогая декорация.
Схема простая, но дьявол кроется в статистике: делайте partitioning ради pruning и управления данными, а не ради красивой архитектурной диаграммы.
Оптимизация производительности баз
@database_performance_tuning_arb
Секционирование не ускоряет всё подряд — сначала проверьте, что именно режете
Этот пост опубликован в Telegram-канале Оптимизация производительности баз. Подписаться можно по ссылке: @database_performance_tuning_arb.