NUMA в PostgreSQL
Посмотрел доклад Андреса Фройнда о поддержке NUMA в PostgreSQL. На скрине - бенчмарк из доклада. Видно, что производительность деградирует с увеличением числа NUMA узлов, и пиковая в ~3 раза ниже чем могла бы быть.
Предложения фокусируются на observability, повышении cache locality и равномерном распределении памяти между различными узлами.
Что ещё 10 лет назад делал MySQL:
- шардирование основных локов, переход на RCU паттерн для них
- использование lock-free структур данных для наиболее горячих точек, например metadata locking, mdl
- шардирование буффер пула
- разделение буффер пула на горячую/среднюю/холодную зону.
Для PostgreSQL, кажется, стоит ещё каким-то образом равномерно распределять backend’s между ядрами, прибивая их к ядрам по мере создания, да и балансировщик запросов, типа Odyssey/PgBouncer для этого имело бы смысл сделать встроенным.
Есть шансы что OrioleDB сможет работать на NUMA значительно лучше, ну или как минимум добавить поддержку будет легче.