Closed ohmycto closed 7 years ago
Привет!
Вопрос по количеству секций: в readme сказано: "Large amount of partitions may result in significant planning overhead". Можно ли как-то определить, что такое "large amount"?
От наших инженеров я слышал утверждение, что уже при 300 партиций становится проблематично использовать стандартное партиционирование postgres. Я думаю, что все зависит от конкретной системы и нагрузки. Мы как-то замеряли время планирования с pg_pathman и стандартным планировщиком:
Тест проводился на запросах вида select ... from ... where key = 123
, т.е. таких, где в условии запроса учавствует ключ и константа. Из графика видно, что время планирования с pg_pathman слабо зависит от количества секций, в то время как в оригинальном постгресе это время растет пропорционально количеству секций.
Если вы будете использовать условия вида where key between ... and ...
, то здесь время планирования будет зависеть от того, сколько реально партиций попадают под условия запроса: если только одна, то результат будет аналогичен графику; если же все партиции, то выигрыша по производительности не будет.
В частности, у нас есть скажем 2000-3000 клиентов (аккаунтов) - нормально ли будет завести такое же количество секций по account_id, или же это перебор?
Если вы будете использовать запросы с константами, как описано выше, то на 2000-3000 тысячах партиций проблем быть не должно.
Другой возможный случай -- когда ключ вычисляется в процессе выполнения. Например, при nested loop-е или prepared statement. В этом случае время планирования уменьшить не получится, но можно существенно снизить время работы executor-а. pg_pathman
будет вычислять ключ во время выполнения и сканировать только ту партицию/те партиции, которой этот ключ соответствует.
Большое спасибо за подробный ответ!
Привет! Вопрос по количеству секций: в readme сказано: "Large amount of partitions may result in significant planning overhead". Можно ли как-то определить, что такое "large amount"?
В своем докладе на Highload вы упоминали про количество 500 и 1000 секций. В частности, у нас есть скажем 2000-3000 клиентов (аккаунтов) - нормально ли будет завести такое же количество секций по account_id, или же это перебор? Что вообще считается приемлемым числом и от чего это зависит?