Рекомендации по партицированию таблиц
Таблицы в YDB отсортированы по возрастанию первичного ключа. Партицирование таблиц осуществляется путём разбиения диапазона значений ключа на последовательные непересекающиеся диапазоны - партиции.
Благодаря партицированию данные таблицы могут распределяться по множеству устройств хранения, а нагрузка при работе с таблицей может задействовать больше процессорных ядер и пропускной способности сети. Вместе с тем слишком большое количество партиций в таблице может добавлять накладные расходы по использованию памяти и процессорного времени. Таким образом оптимальное партиционирование прямым образом влияет на эффективность выполнения запросов. Для достижения оптимального партицирования в YDB есть как средства для задания первоначального разбиения таблицы при её создании, так и способы последующего автоматического партиционирования.
При создании таблицы можно задать первоначальное партицирование одним из 2 способов:
- Задать равномерное партицирование по первой колонке первичного ключа, если эта колонка имеет тип UInt32 или UInt64. В этом случае необходимо явно задать количество партиций.
- Задать точные ключи партицирования, которые определят количество и границы первоначальных партиций.
YDB поддерживает 2 способа автопартицирования таблиц:
- по размеру данных;
- по нагрузке на даташард (даташард - компонент системы обслуживающий партицию таблицы).
Режимы автопартицирования могут быть включены как по отдельности, так и вместе. Оба режима могут производить разбиение одной партиции на две и слияние нескольких партиций в одну. Возможность разбиения или слияния ограничивается настройками таблицы MIN_PARTITIONS
и MAX_PARTITIONS
. При разбиении партиции её диапазон ключей делится на 2 новых диапазона, и данные этих диапазонов образуют новые партиции. Слияние может происходить для нескольких соседних диапазонов, при этом данные нескольких партиций логически сливаются в одну партицию.
Автопартицирование по размеру параметризуется настройкой размера партиции, при достижении которого происходит её разбиение. По умолчанию это значение равно 2ГБ. Выбор ключа для разбиения делается на основании гистограммы распределения размера данных в партиции по поддиапазонам ключей. Если же суммарный размер данных в смежных партициях становится меньше половины от настройки размера, то эти партиции сливаются.
Срабатывание автопартицирования по нагрузке определяется потреблением CPU даташардом обслуживающим партицию. Все даташарды следят за своим потреблением CPU. Если в какой-то момент времени обнаруживается высокое (>50%) потребление, происходит разбиение партиции. Для выбора ключа используется статистика по обращениям к ключам своей партиции.