¿Puede una sola consulta PostgreSQL usar múltiples núcleos?


57

En versiones recientes de PostgreSQL (a partir de diciembre de 2013), ¿podemos compartir una consulta entre dos o más núcleos para aumentar el rendimiento? ¿O deberíamos obtener núcleos más rápidos?

Respuestas:


49

No, para versiones de PostgreSQL anteriores a v9.6. Consulte las Preguntas frecuentes de PostgreSQL : ¿Cómo utiliza PostgreSQL los recursos de la CPU?

El servidor PostgreSQL está basado en procesos (no enhebrado). Cada sesión de base de datos se conecta a un solo sistema operativo PostgreSQL (OS) proceso . El sistema operativo distribuye automáticamente varias sesiones en todas las CPU disponibles. El sistema operativo también utiliza CPU para manejar E / S de disco y ejecutar otras tareas que no son de base de datos. Las aplicaciones cliente pueden usar hilos, cada uno de los cuales se conecta a un proceso de base de datos separado.

Desde la versión 9.6, partes de algunas consultas se pueden ejecutar en paralelo, en procesos separados del sistema operativo, lo que permite el uso de múltiples núcleos de CPU. Las consultas paralelas están habilitadas de forma predeterminada en la versión 10 (max_parallel_workers_per_gather), con paralelismo adicional esperado en futuras versiones.




3

No. Cada conexión genera un proceso separado en el servidor.

Puede "emular" cierto paralelismo utilizando un lenguaje procesal roscado como pljava. Cree un procedimiento (función) de Java que inicie varios subprocesos y cree el resultado de salida utilizando varios trabajadores. El backend está sincronizado para que cada trabajador pueda actualizar la salida de forma asincrónica.

Java tiene un buen soporte para la coordinación / cooperación de hilos.

Como ejemplos, esto sería bueno para operaciones intensivas de CPU u operaciones de longitud de red.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.