PostgreSQL масштабируется до 64 ядер?

10

В этой статье «Компьютерный мир» указано, что PostgreSQL может масштабироваться до ограничения на ядро ​​в 64. Означает ли это для одного многоядерного процессора 64 ядра? Или несколько процессоров с меньшим количеством ядер?

Причина, по которой я спрашиваю, заключается в том, что я пытаюсь определить, сколько процессоров PostgreSQL может масштабироваться, но, конечно, это может быть ограничено типом процессора. Тем не менее, я нашел другие статистические данные в других базах данных (т. Е. Microsoft SQL Server здесь заявляет, что может масштабироваться до 320 логических процессоров), и они не указывают их количество ядер. Это очень расплывчатая статистика?

Любые мысли будут высоко ценится. Спасибо!

О_О
источник
1
PostgreSQL не волнует, если это 8 8-ядерных процессоров, 32 2-ядерных процессора или что-то еще. Это заботится только о логических процессорах. Кроме того, 64 ядра являются приблизительными и зависят от остальной части вашего оборудования; 64 ядра не принесут вам пользы, если у вас есть только 4 ГБ ОЗУ для базы данных объемом 1 ТБ на жестком диске SATA 7200 об / мин. Не существует жесткого технического ограничения на число ядер, просто недавно он был протестирован и доказал, что он хорошо масштабируется до 64.
Крейг Рингер

Ответы:

7

Нет, это очень точная статистика. «Логический процессор» - это ядро. А суть в том, что не имеет значения, как они распределены по физическим процессорам.

И если вы имеете дело с машиной с большим количеством ядер, чем поддерживаемое число, это не должно быть проблемой с PostgreSQL. Каждое соединение по своей природе является однопоточным *, поэтому любое количество ядер будет ограничивать эффективность и действенность одновременных соединений.

Излишне говорить, что это также означает, что вы должны вкладывать свои деньги в более быстрые ядра, чем в количество ядер, если вы не хотите кластеризовать вещи более сложным способом.

* 2017 Обновление: некоторые запросы (или подзапросы) могут выполняться параллельно .

Oli
источник
1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<- Я согласен с этим утверждением только в том случае, если количество ядер превышает число одновременно работающих клиентов и число одновременных клиентов вряд ли увеличится. Для производительности очень важно иметь ядро, доступное для каждого бэкэнда Postgres ...
voretaq7
@ voretaq7 Я в основном согласен, но процессор с более высоким TPS может (очевидно) обрабатывать больше транзакций в данный момент времени, следовательно, больше клиентов. Будет приятное место, которое зависит от вашего типа нагрузки и бюджета.
Оли
1
логический процесс - это наименьшая логическая единица выполнения, при современных технологиях это не ядро, а поток.
Дясный
2
@ voretaq7: нередко подключаться к postgresql через некоторый механизм пула соединений. Среди прочего это делается потому, что подключение к postgresql относительно дорого. Объединение в пул может значительно сократить количество одновременных подключений к базе данных. Поэтому я предпочитаю быстрые процессоры, а не число ядер. Но как всегда: это зависит от многих факторов ...
m.sr 18.12.12
2
@ m.sr Согласовано - механизмы объединения подключений очень распространены. Самый «умный» из них раскручивает несколько соединений с Postgres и балансирует между ними (одно из наших внутренних приложений делает это, предоставляя каждому процессу Apache свое собственное соединение с Postgres - довольно удобное отображение для нашего варианта использования с разумным бэкэндом Отношение к пользователям). ИМХО, если ваш пул соединений ставит запросы в очередь, а не порождает бэкэнды, это не приносит вам никакой пользы, но плюсы и минусы этого было бы более интересно изучить администраторам баз данных . Так я и спросил!
voretaq7
12

Postgres может масштабировать столько процессоров, сколько вы хотите установить, и ваша ОС может эффективно обрабатывать / управлять. Вы можете установить Postgres на 128-ядерный компьютер (или даже на компьютер с 128 физическими процессорами), и он будет работать нормально. Это может даже работать лучше, чем на 64-ядерном компьютере, если планировщик ОС может обрабатывать такое количество ядер.

Было показано, что Postgres линейно масштабируется до 64 ядер (с оговорками: мы говорим о производительности чтения в конкретной конфигурации (диск, ОЗУ, ОС и т. Д.) - у Роберта Хааса есть статья в блоге с хорошим графиком, который Я воспроизвел ниже:

введите описание изображения здесь

Что важно в этом графике?

Отношение является линейным (или почти таким) до тех пор, пока число клиентов меньше или равно количеству ядер , а затем начинается то, что выглядит примерно как линейно-линейное снижение производительности, поскольку у вас больше клиентских подключений, чем у вас. делать ядра для запуска бэкэндов Postgres, потому что бэкэнды начинают бороться за процессор (средняя нагрузка превышает 1.0 и т. д.).

Хотя это было продемонстрировано только для до 64 ядер, вы можете обобщить, что вы можете продолжать добавлять ядра (и клиентов) и продолжать улучшать производительность, вплоть до ограничения какой-либо другой подсистемы (диск, память, сеть), где процессы больше не работают проблемы с процессором, но вместо этого они ожидают чего-то другого.

Haas также есть еще одна статья, в которой они доказали линейную масштабируемость до 32 ядер, в которой есть отличный справочный материал по масштабируемости в целом - настоятельно рекомендуется справочное чтение!)

voretaq7
источник
2
Кстати, причина такой линейной масштабируемости была упомянута в ответе Оли : Postgres использует отдельный бэкэнд-процесс для каждого клиентского соединения. В результате, если вы используете только одно соединение, вы не увидите значительных (если таковые имеются) преимуществ для нескольких ядер - вам нужны параллельные запросы для использования нескольких ядер.
voretaq7
2

Другие пояснили, что логический процессор обычно относится к ядру процессора, но я хочу прокомментировать утверждение, что не имеет значения, как ядра распределяются по процессорам.

На кристалле ЦП могут быть кэши, которые совместно используются ядрами или выделены для отдельных или подгрупп ядер. Например, одна общая конфигурация - это выделенный кэш L1 и общий кэш L2. В этом случае масштабируемость одноядерного ЦП может отличаться от двух одноядерных.

Эти эффекты масштабируемости сохраняются в основной памяти, причем машины NUMA демонстрируют поведение, отличное от не-NUMA.

Я указываю на это только потому, что ОП обсуждает вопросы масштабируемости, ответы на которые, как правило, более тонкие, чем «программа X может использовать Y ядер ЦП».

Тим Б
источник
1

В данном случае они означают несколько процессоров с меньшим количеством ядер ... Некоторые из разговоров о перспективах на будущее. Некоторые говорят о маркетинге.

ewwhite
источник