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