¿PostgreSQL escala hasta 64 núcleos?

10

En este artículo de Computer World , especifica que PostgreSQL puede escalar hasta un límite de núcleo de 64. ¿Esto significa para un procesador multinúcleo de 64 núcleos? ¿O múltiples procesadores con menos núcleos?

La razón por la que pregunto es porque estoy tratando de encontrar la cantidad de procesadores que PostgreSQL puede escalar, pero por supuesto eso puede estar limitado al tipo de procesador. Sin embargo, he estado buscando otras estadísticas en otras bases de datos (es decir, Microsoft SQL Server aquí indicando que puede escalar hasta 320 procesadores lógicos) y no especifican su número de núcleos. ¿Es esta una estadística muy vaga?

Cualquier pensamiento sería muy apreciado. ¡Gracias!

O_O
fuente
1
A PostgreSQL no le importa si son 8 CPU de 8 núcleos, 32 CPU de 2 núcleos o lo que sea. Solo se preocupa por los procesadores lógicos. Además, 64 núcleos son aproximados y dependen del resto de su hardware; 64 núcleos no le servirán de nada si solo tiene 4 GB de RAM para una base de datos de 1 TB en un disco duro SATA de 7200 rpm. No hay un límite técnico estricto para los números principales, es solo que recientemente se ha probado y se ha probado que escala bien hasta 64.
Craig Ringer,

Respuestas:

7

No, es una estadística muy precisa. Un "procesador lógico" es un núcleo. Y un núcleo es solo eso, no importa cómo se extiendan sobre los procesadores físicos.

Y si se trata de una máquina con más núcleos que el número admitido, esto no debería ser un problema con PostgreSQL. Cada conexión es inherentemente de un solo subproceso *, por lo que cualquier número de núcleos que tenga es lo que limitará la eficiencia y la eficacia de las conexiones concurrentes.

No hace falta decir que esto también significa que debe poner su dinero en núcleos más rápidos que la cantidad de núcleos a menos que desee agrupar las cosas en un método más complicado.

* Actualización 2017: algunas consultas (o subconsultas) pueden ejecutarse en paralelo .

Oli
fuente
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.<- Solo estoy de acuerdo con esta afirmación si el número de núcleos es mayor que el número de clientes concurrentes, y es poco probable que aumente el número de clientes concurrentes. Es bastante importante para el rendimiento tener un núcleo disponible para cada backend de Postgres ...
voretaq7
@ voretaq7 Estoy de acuerdo en su mayoría, pero una CPU con un TPS más alto puede (obviamente) manejar más transacciones en un momento dado, por lo tanto, más clientes. Habrá un punto óptimo que dependerá de su tipo de carga y presupuesto.
Oli
1
Un proceso lógico es la unidad de ejecución lógica más pequeña, con las tecnologías actuales, no es un núcleo, es un hilo.
dyasny
2
@ voretaq7: No es raro conectarse a postgresql a través de algún mecanismo de agrupación de conexiones. Entre otros, esto se hace porque conectarse a postgresql es relativamente costoso. La agrupación puede reducir el número de conexiones simultáneas a la base de datos extremadamente. Por lo tanto, tiendo a preferir CPU rápidas en lugar de # de núcleos. Pero como siempre: depende de muchos factores ...
m.sr
2
@ m.sr De acuerdo: los mecanismos de agrupación de conexiones son muy comunes. El "más inteligente" de estos conectará varias conexiones a Postgres y se equilibrará entre ellas (una de nuestras aplicaciones internas lo hace dando a cada proceso de Apache su propia conexión a Postgres, una asignación bastante conveniente para nuestro caso de uso con un backend razonable relación de usuarios). En mi humilde opinión, si su agrupación de conexiones está haciendo que las consultas se pongan en cola en lugar de generar backends, no le está haciendo ningún favor, pero las ventajas y desventajas de eso serían más interesantes para profundizar en los administradores de bases de datos . ¡Entonces pregunté!
voretaq7
12

Postgres puede escalar hasta tantos procesadores como desee instalar, y su sistema operativo puede manejar / administrar de manera efectiva. Puede instalar Postgres en una máquina de 128 núcleos (o incluso en una máquina con 128 procesadores físicos) y funcionará bien. Incluso puede funcionar mejor que en una máquina de 64 núcleos si el programador del sistema operativo puede manejar tantos núcleos.

Se ha demostrado que Postgres escala linealmente hasta 64 núcleos (con advertencias: estamos hablando del rendimiento de lectura, en una configuración específica (disco, RAM, sistema operativo, etc.) - Robert Haas tiene un artículo de blog con un bonito gráfico que He reproducido a continuación:

ingrese la descripción de la imagen aquí

¿Qué tiene de importante este gráfico?

La relación es lineal (o casi) siempre que el Número de clientes sea ​​menor o igual que el Número de núcleos , y luego comienza lo que parece ser aproximadamente una disminución log-lineal en el rendimiento, ya que tiene más conexiones de clientes que usted hacer núcleos para ejecutar los backends de Postgres porque los backends comienzan a pelear por la CPU (el promedio de carga supera 1.0, etc.).

Si bien solo se ha demostrado para hasta 64 núcleos, puede generalizar que puede seguir agregando núcleos (y clientes) y seguir mejorando el rendimiento, hasta el límite de algún otro subsistema (disco, memoria, red) donde los procesos ya no están teniendo problemas de contención de CPU pero en cambio están esperando algo más.

( Haas también tiene otro artículo en el que demostraron una escalabilidad lineal a 32 núcleos que tiene un excelente material de referencia sobre la escalabilidad en general: ¡lectura de fondo muy recomendable!)

voretaq7
fuente
2
Por cierto, la razón de esta escalabilidad lineal se mencionó en la respuesta de Oli : Postgres utiliza un proceso de backend separado para cada conexión de cliente. Como resultado, si solo usa una conexión, no verá muchos beneficios (si es que los hay) para múltiples núcleos: necesita solicitudes paralelas para explotar múltiples núcleos.
voretaq7
2

Otros han aclarado que un procesador lógico generalmente se refiere a un núcleo de CPU, pero quiero comentar sobre la afirmación de que no importa cómo se distribuyen los núcleos sobre las CPU.

Puede tener cachés en la matriz de CPU que se comparten entre núcleos o que están dedicados a núcleos individuales o subgrupos. Por ejemplo, una configuración común es la caché L1 dedicada y la caché L2 compartida. En este caso, la escalabilidad de una sola CPU de doble núcleo puede diferir de dos CPU de un solo núcleo.

Estos efectos de escalabilidad continúan en la memoria principal, con máquinas NUMA que exhiben un comportamiento diferente que las que no son NUMA.

Lo señalo solo porque el OP está discutiendo cuestiones de escalabilidad, cuyas respuestas son generalmente más matizadas que "el programa X puede usar núcleos Y de CPU".

Tim B
fuente
1

En este caso, se refieren a múltiples procesadores con menos núcleos ... Algunas de las charlas son a prueba de futuro. Algunos hablan de marketing.

ewwhite
fuente