Durante mucho tiempo, PostgreSQL utilizó un sólo Cçcore de CPU para llevar a cabo agregaciones costosas. La idea de “agg” es justamente cambiar eso. Escale sus operaciones analíticas a CPUs múltiples y use todo el poder de procesamiento de su sistema.

Funcionalidades

  • Agregaciones comunes en paralelo (sum, count, min, max, etc.)
  • Soporte para cláusulas FILTER
  • Soporte para exclusión de constrains (cada partición es manejada por un core de CPU)
  • Fácil instalación
  • Funciona con PostgreSQL 9.5

Potenciando performance

Nuestras pruebas han mostrado un incremento casi lineal para muchos workloads. En muchos casos, la agregación es un cuello de botella. Especialmente cláusulas CASE/WHEN complejas necesitan mucha CPU y relentecen las agregaciones. Estas operaciones son exactamente a lo que apunta “agg”. Al escalar a múltiples cores CPU el tiempo de procesamiento se reduce considerablemente

En un servidor grande hemos visto que determinadas queries (analíticas) se ejecutan hasta 30 veces más rápido.

agg es ideal para agregaciones y analytics de gran escala

La principal ventaja es que no hay necesidad de modificar su código SQL – agg simplemente hace su trabajo. Acelera sus queries siempre que sea posible, de una manera 100% transparente

 

Instalación

Agg puede descargarse libremente desde nuestra web (al final de esta página)

Para instalar el paquete, descargue el archivo tar y extráigalo:

Después setee PG_CONFIG al path correcto:Compile el módulo:"agg" debe ser cargado como módulo cuando PostgreSQL se inicia. Para cargar "agg" agregue "agg.so" a shared_preload_libraries en su postgresql.conf:Después reinice PostgreSQLPara habilitar "agg" en su Base de Datos, corra su cliente SQL favorito. PostgreSQL cargará todos los componentes necesarios para escalar sus queries

Testeando agg

La manera más fácil de testear "agg" es crear algún dato de test simple y ver qué sucede:Después correr un query de test:Para prender "agg" tiene que configurar la cantidad de workers que va a querer que utilice PostgreSQL:Si el valor de agg.hash_workers queda definido en 0 el módulo se apagaráSi el valor de agg.hash_workers queda definido en 1, utilizará un sólo worker. Esto es útil para debuggingCONSEJO: Para que agg tenga suficientes worker processes, asegúrese que max_worker_processes en postgresql.conf tenga un valor relativamente alto.

Lo que agg puede hacer por usted

agg es capaz de correr las siguientes cosas en paralelo:

  • Agregaciones simples: GROUP BY, HAVING
  • Cláusulas FILTER
  • Scan de tablas, particionadas o no particionadas

agg no escala en las siguientes operaciones:

  • Scans con índices
  • Sorting
  • Joins
  • Aggregates personalizados (a menos que haya soporte explícito para agg)
  • VACUUM, CREATE INDEX, y otras tareas de administración
  • Grouping sets

agg fue diseñado para agregaciones a gran escala. Si agg encuentra nodos que no puede manejar, simplemente se apaga y ejecuta un plan estándar generado por PostgreSQL. Sin embargo, si agg encuentra que el plan puede ser escalado, modifica el plan e intenta lanzar un worker process para correr la consulta en paralelo.

La regla general es: cuanto más complicada sea la cláusula SELECT – mejor para agg. Consultas con muchas agregaciones y GROUP BYs complicados tienden a ser las más beneficiadas.

Tips de Performance

Hemos visto que buffers compartidos grandes son beneficiosos para agg. Por lo tanto, usar buffers significativamente más grandes en PostgreSQL paracería acelerar las cosas en la mayoría de los sistemas. Con buffers lo suficientemente grande, se puede alcanzar prácticamente una escalabilidad lineal hasta una cantidad razonable de CPUs.

Se comprobó tambiém que es una buena idea configurar agg.hash_workers en un valor igual al número de particiones (un múltiplo también funciona) siempre y cuando el número de particiones sea razonablemente pequeño (hasta 20)

agg puede ayudarlo también para escalar una tabla no particionada despachando los datos con un queue de shared memory. Sin embargo, no tiene sentido para agregaciones simples. La regla es: cuanto más complicada sean sus agregaciones, mejor para agg. Si hay 10, 20, 30 o más funciones de agregación en su cláusula SELECT, agg va a ofrecerla una preformance superior

Saque provecho de seq scans sincronizados: PostgreSQL es capaz de sincronizar scans secuenciales para reducir significativamente el I/O para consultas que corren concurrentemente. Lanzar queries concurrentes sobre el mismo set de tablas tiende a beneficiar a la app porque los cuellos de botellas de I/O puede ser reducido considerablemente.

Versiones soportadas de PostgreSQL

Actualmente solamente está disponible para PostgreSQL 9.5.

Soporte 24×7

Si está pensando en correr agg en producción Cybertec Schönig & Schönig GmbH puede brindarle soporte profesional 24×7. Usted obtendrá fixes, consultoría training y expertise para hacer sus proyectos exitosos.

Contáctenos

Licencia

“agg” está disponible bajo los términos de licencia de PostgreSQL