{"id":8359,"date":"2021-11-02T09:33:16","date_gmt":"2021-11-02T08:33:16","guid":{"rendered":"https:\/\/hoplasoftware.com\/?p=8359"},"modified":"2024-07-11T13:08:35","modified_gmt":"2024-07-11T11:08:35","slug":"rdbms-pooling-en-postgresql-edb-advanced-server","status":"publish","type":"post","link":"https:\/\/hopla.tech\/en\/rdbms-pooling-en-postgresql-edb-advanced-server\/","title":{"rendered":"RDBMS POOLING en PostgreSQL EDB Advanced Server"},"content":{"rendered":"<p>Vamos a hablar de las dos herramientas que sobresalen por encima del resto: pgBouncer y pgpool-ii<\/p>\n\n\n\n<p>pgBouncer y pgpool-ii: dos herramientas que disponen de versiones espec\u00edficas para EDB Advanced Server.<\/p>\n\n\n\n<p>En los \u00faltimos tiempos, con el crecimiento de las aplicaciones basadas en <a href=\"https:\/\/hoplasoftware.com\/postgresql-2\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">PostgreSQL<\/span><\/a>, va aumentando&nbsp; la necesidad de utilizar alg\u00fan tipo de pool de conexiones.<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.org\/\" target=\"_blank\"><span class=\"has-inline-color has-vivid-cyan-blue-color\">PostgreSQL <\/span><\/a>no dispone de ning\u00fan tipo de gestor de pool de conexiones interno, por lo que el acercamiento a la gesti\u00f3n de las conexiones suele habilitarse a trav\u00e9s de herramientas externas a PostgreSQL.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RDBMS POOLING en PostgreSQL EDB Advanced Server &#8211; PGBOUNCER y PGPOOL-II<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&nbsp;\u00bfPool de conexiones?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/gAMonF46oiSFWiIl_6qpqtchD_oGh9djBGTy4y9xksmeYa0MhLffvqR_D0l5UTbGGcRq-jVQV6QwAEEnU0vK9U-OQvqYWk72QqsvMtZZo3gdkx0p0gbp9OMpoCTi1UcIk3UG73P1\" alt=\"\"\/><\/figure>\n\n\n\n<p>En PostgreSQL cada vez que se realiza una nueva conexi\u00f3n, se genera un nuevo proceso background asociado a dicha conexi\u00f3n. Al ser procesos diferentes al de la base de datos y no threads del proceso principal de la base de datos esto evita que un cliente con un comportamiento an\u00f3malo, pueda afectar al proceso de la bbdd e incluso generar una ca\u00edda de la base de datos.<\/p>\n\n\n\n<p>Pero este comportamiento tiene un pero, es mucho m\u00e1s costoso generar un nuevo proceso de SO (a nivel de tiempo y consumo de memoria principalmente), que por ejemplo crear un nuevo thread para un proceso ya existente.<\/p>\n\n\n\n<p>Los clientes tienden a realizar una gran cantidad de conexiones sobre la base de datos, con el consumo de recursos que eso conlleva. En un mundo ideal, las aplicaciones deber\u00edan hacer un buen uso de las conexiones, utiliz\u00e1ndolas siempre que sea posible y al mismo tiempo evitando que haya demasiadas conexiones idle durante mucho tiempo. Pero esta situaci\u00f3n no siempre se da. Adem\u00e1s hay situaciones en que las aplicaciones necesitan un gran n\u00famero de conexiones.&nbsp;<\/p>\n\n\n\n<p>Hay l\u00edmites al n\u00famero m\u00e1ximo de conexiones que un servidor puede gestionar, y si se supera ese l\u00edmite se empezar\u00e1 a ver contenci\u00f3n en diferentes \u00e1reas y en alg\u00fan momento afectar\u00e1 a la capacidad de procesamiento del servidor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Soluciones<\/strong><\/h3>\n\n\n\n<p>Disponemos de los pool de conexiones para solventar este tipo de situaciones. Un pool de conexiones de base de datos es b\u00e1sicamente una cach\u00e9 de conexiones de bbdd para mantener las conexiones abiertas para poder ser reutilizadas en un futuro por una nueva petici\u00f3n de conexi\u00f3n. Con esto ahorramos tiempo al evitar la creaci\u00f3n de un nuevo proceso backend con cada nueva conexi\u00f3n, mejorando el rendimiento y haciendo un mejor uso de los recursos.<\/p>\n\n\n\n<p>Existen varias maneras de implementar los pool de conexiones, principalmente a nivel de aplicativo o como un servicio externo. Nosotros nos centraremos en el servicio externo, con herramientas que se pueden desplegar tanto en un servidor aparte, como en el mismo servidor de base de datos.<\/p>\n\n\n\n<p>Con estos servicios externos, la aplicaci\u00f3n conecta directamente a este servicio externo, que a su vez redirige las conexiones a la base de datos, a trav\u00e9s del pool de conexiones que mantiene.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comparativa pgBouncer y pgpool-ii<\/strong><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>PGPOOL-II<\/strong><\/h2>\n\n\n\n<p>Pgpool-ii es una herramienta para la gesti\u00f3n de clusters para PostgreSQL. Lo cierto es que pgpool no se suele elegir por su capacidad para gestionar pool de conexiones, sino por el conjunto de funcionalidades que ofrece, HA, balanceo de carga a nodos read only, replicaci\u00f3n l\u00f3gica y por supuesto gesti\u00f3n de pool de conexiones.<\/p>\n\n\n\n<p>En el caso que nos aplica, los pool de conexiones, si lo \u00fanico que se desea es esta funcionalidad hay mejores opciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00bfC\u00f3mo funciona Pgool-II?<\/strong><\/h2>\n\n\n\n<p>Pgpool cachea conexiones establecidas con la base de datos y las reutiliza cuando entra una nueva petici\u00f3n con las mismas propiedades (usuario, base de datos, y otros par\u00e1metros de conexi\u00f3n si los hubiera)<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Cuando se inicia del proceso principal de pgpool se crean 32 procesos hijos ( 32 es el valor por defecto, definido por la variable num_init_children), y cada proceso hijo puede cachear conexiones hasta el valor definido por la variable max_pool (por defecto 4)<\/li><li>La conexi\u00f3n a pgpool se realizar\u00eda de la misma manera a como se conectar\u00eda a la bbdd. Cuando pgpool recibe una nueva conexi\u00f3n, se redirige a uno de esos procesos hijos.<\/li><li>El proceso hijo busca en su pool de conexiones por una conexi\u00f3n establecida con el mismo par user\/database. Si la encuentra la utilizar\u00e1.<\/li><li>Si no encuentra la conexi\u00f3n, crea una nueva conexi\u00f3n y la registra en el pool si hay alg\u00fan espacio libre, si no lo hay pgpool cerrar\u00e1 la conexi\u00f3n m\u00e1s antigua y utilizar\u00e1 el espacio con la nueva conexi\u00f3n.<\/li><li>Una vez pgpool reciba la petici\u00f3n de cerrar la conexi\u00f3n, proceder\u00e1 a cerrar la conexi\u00f3n con el cliente pero mantendr\u00e1 la conexi\u00f3n con la base de datos.<\/li><\/ul>\n\n\n\n<p>Evidentemente, hay m\u00e1s factores a tener en cuenta y una buena configuraci\u00f3n de pgpool es necesaria para el correcto funcionamiento de la gesti\u00f3n de conexiones. Una mala configuraci\u00f3n podr\u00eda hacer m\u00e1s mal que bien.<\/p>\n\n\n\n<p>Se puede revisar la siguiente url para ver con m\u00e1s detalle los par\u00e1metros disponibles en la configuraci\u00f3n. <a href=\"https:\/\/www.pgpool.net\/docs\/42\/en\/html\/runtime-config-connection-pooling.html\">https:\/\/www.pgpool.net\/docs\/42\/en\/html\/runtime-config-connection-pooling.html<\/a><\/p>\n\n\n\n<p>El problema de pgpool con el pool de conexiones, especialmente para un n\u00famero peque\u00f1o de conexiones, es que como cada proceso hijo tiene su propio pool y no hay ninguna manera de controlar a qu\u00e9 proceso hijo conecta cada cliente, queda todo un poco a la suerte el que se reutilicen las conexiones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>PGBOUNCER<\/strong><\/h2>\n\n\n\n<p>Pgbouncer es el gestor de pool de conexiones m\u00e1s popular. Pgbouncer no tiene m\u00e1s funcionalidades, solo act\u00faa como pool de conexiones, y esto lo hace muy bien. Se sit\u00faa entre la bbdd y el cliente y se comunica con el protocolo de PostgreSQL, emulando al servidor de PostgreSQL. La conexi\u00f3n a pgbouncer se realiza exactamente igual, con la misma sintaxis, a si conect\u00e1ramos a la base de datos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00bfC\u00f3mo funciona pgbouncer?<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Cuando entra una nueva conexi\u00f3n, tras gestionar la autenticaci\u00f3n, comprueba si hay alguna conexi\u00f3n cacheada con el mismo par usuario\/password<\/li><li>si encuentra alguna conexi\u00f3n cacheada la devuelve cliente<\/li><li>si no encuentra ninguna conexi\u00f3n cacheada, crea una nueva conexi\u00f3n, siempre respetando los l\u00edmites establecidos en pool_size, max_client_connections, max_db_connections y max_user_connections (par\u00e1metros que pueden ser definidos en la configuraci\u00f3n de pgbouncer)<\/li><li>si para crear una nueva conexi\u00f3n se violara alguno de los l\u00edmites establecidos con los par\u00e1metros anteriores, la conexi\u00f3n quedar\u00eda en espera hasta que se pudiera crear la nueva conexi\u00f3n, excepto si se viola el l\u00edmite max_client_connections, que en ese caso se aborta la conexi\u00f3n.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pgbouncer dispone de 3 modos para realizar y gestionar las conexiones:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>session: la conexi\u00f3n es devuelta al pool cuando el cliente cierra la conexi\u00f3n<\/li><li>transaction: la conexi\u00f3n es devuelta al pool tras cada transacci\u00f3n completa (commit or rollback)<\/li><li>statement: La conexi\u00f3n es devuelta al pool tan pronto como una sentencia ha sido ejecutada. En este modo autocommit siempre estar\u00e1 on.<\/li><\/ul>\n\n\n\n<p>Antes de devolver la conexi\u00f3n a la bbdd, pgbouncer ejecuta un reset query, para limpiar la conexi\u00f3n de cualquier informaci\u00f3n relativa a la sesi\u00f3n. Esto hace que sea seguro compartir las conexiones entre clientes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfQu\u00e9&nbsp; hace de pgbouncer una gran herramienta como gestor de pool de conexiones?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Muy sencillo de configurar.<\/li><li>3 modos para gestionar los pool (session, transaction y statement)<\/li><li>Muy ligero. Solo levanta un proceso y todos los comandos desde el cliente y respuestas desde la bbdd pasan a trav\u00e9s de pgbouncer sin ning\u00fan procesamiento.<\/li><li>Passthrought authenticaci\u00f3n. Pgbouncer es de los pocos gestores de pool de conexiones que no necesita tener acceso a las password (en texto plano o encriptadas) para autenticar a los usuarios.&nbsp;<\/li><\/ul>\n\n\n\n<p>Eso s\u00ed, pgbouncer hace lo que hace, es un gran gestor de pool de conexiones, pero no dispone de otras funcionalidades como balanceo de carga o ha.<\/p>\n\n\n\n<p>Vamos a realizar una peque\u00f1a bater\u00eda de pruebas para comprobar si se observa mejor\u00eda al utilizar un pool de conexiones comparativamente con una conexi\u00f3n directa a la base de datos.&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><strong>PRUEBAS:<\/strong><\/h6>\n\n\n\n<p>Para las pruebas se ha utilizado la versi\u00f3n enterprise EDB Advanced Server 13 y las versiones espec\u00edficas de pgpool-ii y pgbouncer disponibles para dicha versi\u00f3n<\/p>\n\n\n\n<p>Hemos realizado varias pruebas simples con pgbench para testear las diferentes herramienta en un entorno de AWS con las siguientes caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>2 EC2 m5.4xlarge : 16cpu &#8211; 64GB &#8211; gp3 ssd&nbsp;<\/li><li>1 EC2 c5.18xlarge: 72cpu &#8211; 144GB &#8211; gp3 ssd<\/li><\/ul>\n\n\n\n<h6 class=\"wp-block-heading\">EDB Postgres Advanced Server desplegado en los nodos m5, con streaming replication (Master\/Slave): <\/h6>\n\n\n\n<p>Se configura en los 3 nodos la herramienta EFM (EDB Failover Manager)<\/p>\n\n\n\n<p>Se configura en los 2 nodos m5 la herramienta PGBOUNCER (Versi\u00f3n 1.16 espec\u00edfica para EPAS) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/p>\n\n\n\n<p>Se configura en los 3 nodos la herramienta PGPOOL-II (Versi\u00f3n 4.2 espec\u00edfica para EPAS)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">Configuraci\u00f3n bases de datos EPAS:<\/h6>\n\n\n\n<p>shared_buffers = 16GB<\/p>\n\n\n\n<p>work_mem = 13981kB<\/p>\n\n\n\n<p>maintenance_work_mem = 2GB<\/p>\n\n\n\n<p>effective_cache_size = 48GB<\/p>\n\n\n\n<p>effective_io_concurrency = 200<\/p>\n\n\n\n<p>max_worker_processes = 16<\/p>\n\n\n\n<p>max_parallel_maintenance_workers = 4<\/p>\n\n\n\n<p>max_parallel_workers_per_gather = 4<\/p>\n\n\n\n<p>max_parallel_workers = 16<\/p>\n\n\n\n<p>random_page_cost = 1.1<\/p>\n\n\n\n<p>wal_level = replica<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Las pruebas se han realizado sobre 3 configuraciones diferentes, todas ellas con streaming replication y en HA (con la herramienta de EDB EFM o con PGPOOL-II)<\/strong><\/h2>\n\n\n\n<p><em>Directo: Master\/Slave + Cluster EFM<\/em><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/UDsGdOYNg2UnNMbY3nCm6fGiCiGseHSMYTtGAyMGerpbG8KeGJIRjHfX-W2MCKIw9Wvn73koOOTTjII2gJDCO_sdFMh2onqys57oLLbrF0KwpMTEh7IZFhZv_GBrFHLMSVopk9of\" alt=\"\" width=\"400\" height=\"372\"\/><\/figure><\/div>\n\n\n\n<p><em>PgBouncer: Master\/Slave + Cluster EFM + PgBouncer<\/em><\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/qdelx5Ebg7BAzYfRpZguKRejRNGQ0qOwQul1WyuRFJ9IXIJq8jl5V3663uOuIlCvQaYIxFuYKlly8KVTeMOrHd0_6U_jfk8eSOmJ0WhuvdOx-xeHFE5N2AJygcpGHQUAsuZYADqB\" alt=\"\" width=\"390\" height=\"400\"\/><\/figure><\/div>\n\n\n\n<p><em>PGPOOL-II: Master\/Slave + Cluster PgPool-II<\/em><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/cazP_Q36PW4d8eZBE8GHStsjLUCzapzEQ1tXxNir9GGtXmyvH0CzBoEBnMWG7rkMAzKQrz_xcTf8qhYPusxGwNrwEMqDIa4XhZiiZdEpvBrS4-HzIyxXOqd-vCvCKrIfKzPJ2Ygf\" alt=\"\" width=\"400\" height=\"395\"\/><\/figure><\/div>\n\n\n\n<h6 class=\"wp-block-heading\"><strong>Las pruebas las hemos realizado con las siguientes opciones de pgbench:&nbsp;<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\"><li>Scale factor de 5000 para generar el entorno de pruebas.<\/li><li>Hilos de ejecuci\u00f3n igual a las conexiones<\/li><li>7 minutos de ejecuci\u00f3n<\/li><li>Nueva conexi\u00f3n tras cada transacci\u00f3n.<\/li><\/ul>\n\n\n\n<p>Pgbouncer configurado en modo session y se ha ido aumentando el pool_size para comprobar el comportamiento con diferentes tama\u00f1os de pool. (16, 64, 128 y 600)<\/p>\n\n\n\n<p>Para PgPool-II se ha ido igualando el par\u00e1metro num_init_children al n\u00famero de conexiones, ya que daba problemas con pgbench en otro caso, dejando el par\u00e1metro max_pool a 4 (valor por defecto)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Modo Select Only<\/h4>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/rcj_0rNUcqe3lKIsyK1SHHWz3UBOwu0VsJ21f2qYVVp15-NQ7vFZaMmlZLP2_1fRHIS93ZCpZBYw2MlvXjXURDxMgdeVkydzO8Oj0VFqmMGxAcM1W9jjjKWvGsx24zYH2Vy3IXWI\" alt=\"\" width=\"702\" height=\"444\" title=\"Gr\u00e1fico\"\/><\/figure><\/div>\n\n\n\n<p><em>PgBench sin limitaci\u00f3n a \u201cselect only\u201d<\/em><\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/9abtvYVoP-B1CuMcTq6CUKxE6toonnzxRqPryxQAVdndiurnnneaavyUDbvz2CtsLYJJpYsDGmX492TJ54Rmka7BMjwqYwrEdduoYmKIbi_Yzttpvj5BttTzNYR6Uu-p_FnjZqKC\" alt=\"\" data-id=\"\"\/><figcaption class=\"blocks-gallery-item__caption\">Modo Select Only<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>CONCLUSIONES pgBouncer y pgpool-ii<\/strong><\/h4>\n\n\n\n<p>Podemos observar que en modo lectura, tanto pgbouncer como pgpool mejoran ostensiblemente las transacciones por segundo TPS ,&nbsp; con resultados parejos entre pgpool y pgbouncer.<\/p>\n\n\n\n<p>Sin limitar las transacciones a modo lectura los resultados son parecidos comparativamente con las conexiones directas, pero en este caso siendo algo mejor los resultados con pgbouncer.<\/p>\n\n\n\n<p>Dependiendo del pool que se configure en pgbouncer el rendimiento cambia, siendo mejor con un pool entre 100-300.<\/p>\n\n\n\n<p>En definitiva vemos que el uso de un pool de conexiones puede mejorar considerablemente el rendimiento de nuestro entorno. <\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><strong>Si quieres saber m\u00e1s sobre pgBouncer y pgpool-ii en <a rel=\"noreferrer noopener\" href=\"https:\/\/www.enterprisedb.com\/\" target=\"_blank\"><span class=\"has-inline-color has-luminous-vivid-orange-color\">PostgreSQL EDB Advanced Server<\/span><\/a>, no te pierdas este webinar: <\/strong><\/h6>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=ClMCL_kHwqc&#038;list=PLME4BrXJPn7_C_pp7huqajAuOBfcjBbGI&#038;index=8\n<\/div><\/figure>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<p><\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Vamos a hablar de las dos herramientas que sobresalen por encima del resto: pgBouncer y pgpool-ii pgBouncer y pgpool-ii: dos herramientas que disponen de versiones espec\u00edficas para EDB Advanced Server. En los \u00faltimos tiempos, con el crecimiento de las aplicaciones basadas en PostgreSQL, va aumentando&nbsp; la necesidad de utilizar alg\u00fan tipo de pool de conexiones. [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":12345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[284],"tags":[248,249,177],"class_list":["post-8359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql","tag-pgbouncer","tag-pgpool-ii","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>RDBMS POOLING en PostgreSQL EDB Advanced Server<\/title>\n<meta name=\"description\" content=\"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hopla.tech\/en\/rdbms-pooling-en-postgresql-edb-advanced-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RDBMS POOLING en PostgreSQL EDB Advanced Server\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hopla.tech\/en\/rdbms-pooling-en-postgresql-edb-advanced-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Hopla! Tech\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-02T08:33:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-11T11:08:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Hopla!\u00a0Tech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:site\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hopla!\u00a0Tech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/\"},\"author\":{\"name\":\"Hopla!\u00a0Tech\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\"},\"headline\":\"RDBMS POOLING en PostgreSQL EDB Advanced Server\",\"datePublished\":\"2021-11-02T08:33:16+00:00\",\"dateModified\":\"2024-07-11T11:08:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/\"},\"wordCount\":1895,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/Postgres-Pooling-e1635840952485.webp\",\"keywords\":[\"PGBOUNCER\",\"PGPOOL-II\",\"postgresql\"],\"articleSection\":[\"Postgresql\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/\",\"name\":\"RDBMS POOLING en PostgreSQL EDB Advanced Server\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/Postgres-Pooling-e1635840952485.webp\",\"datePublished\":\"2021-11-02T08:33:16+00:00\",\"dateModified\":\"2024-07-11T11:08:35+00:00\",\"description\":\"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/Postgres-Pooling-e1635840952485.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/Postgres-Pooling-e1635840952485.webp\",\"width\":500,\"height\":375},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/rdbms-pooling-en-postgresql-edb-advanced-server\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/hopla.tech\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RDBMS POOLING en PostgreSQL EDB Advanced Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"name\":\"Hopla! Tech\",\"description\":\"The enterprise software and consultancy company\",\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"alternateName\":\"Hopla!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hopla.tech\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\",\"name\":\"Hopla! Tech\",\"alternateName\":\"Hopla!\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"width\":274,\"height\":115,\"caption\":\"Hopla! Tech\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/HoplaSoftware\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hopla-software\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@hoplasoftware7485\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\",\"name\":\"Hopla!\u00a0Tech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"caption\":\"Hopla!\u00a0Tech\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"RDBMS POOLING en PostgreSQL EDB Advanced Server","description":"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hopla.tech\/en\/rdbms-pooling-en-postgresql-edb-advanced-server\/","og_locale":"en_GB","og_type":"article","og_title":"RDBMS POOLING en PostgreSQL EDB Advanced Server","og_description":"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.","og_url":"https:\/\/hopla.tech\/en\/rdbms-pooling-en-postgresql-edb-advanced-server\/","og_site_name":"Hopla! Tech","article_published_time":"2021-11-02T08:33:16+00:00","article_modified_time":"2024-07-11T11:08:35+00:00","og_image":[{"width":500,"height":375,"url":"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp","type":"image\/webp"}],"author":"Hopla!\u00a0Tech","twitter_card":"summary_large_image","twitter_creator":"@HoplaSoftware","twitter_site":"@HoplaSoftware","twitter_misc":{"Written by":"Hopla!\u00a0Tech","Estimated reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#article","isPartOf":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/"},"author":{"name":"Hopla!\u00a0Tech","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22"},"headline":"RDBMS POOLING en PostgreSQL EDB Advanced Server","datePublished":"2021-11-02T08:33:16+00:00","dateModified":"2024-07-11T11:08:35+00:00","mainEntityOfPage":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/"},"wordCount":1895,"commentCount":0,"publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"image":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp","keywords":["PGBOUNCER","PGPOOL-II","postgresql"],"articleSection":["Postgresql"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/","url":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/","name":"RDBMS POOLING en PostgreSQL EDB Advanced Server","isPartOf":{"@id":"https:\/\/hopla.tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#primaryimage"},"image":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp","datePublished":"2021-11-02T08:33:16+00:00","dateModified":"2024-07-11T11:08:35+00:00","description":"PostgreSQL Pooling pgBouncer y pgpool-ii. Herramientas que sobresalen por encima del resto. Versiones espec\u00edficas para EDB Advanced Server.","breadcrumb":{"@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#primaryimage","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2021\/11\/Postgres-Pooling-e1635840952485.webp","width":500,"height":375},{"@type":"BreadcrumbList","@id":"https:\/\/hopla.tech\/rdbms-pooling-en-postgresql-edb-advanced-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/hopla.tech\/"},{"@type":"ListItem","position":2,"name":"RDBMS POOLING en PostgreSQL EDB Advanced Server"}]},{"@type":"WebSite","@id":"https:\/\/hopla.tech\/#website","url":"https:\/\/hopla.tech\/","name":"Hopla! Tech","description":"The enterprise software and consultancy company","publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"alternateName":"Hopla!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hopla.tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/hopla.tech\/#organization","name":"Hopla! Tech","alternateName":"Hopla!","url":"https:\/\/hopla.tech\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","width":274,"height":115,"caption":"Hopla! Tech"},"image":{"@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/HoplaSoftware","https:\/\/www.linkedin.com\/company\/hopla-software\/","https:\/\/www.youtube.com\/@hoplasoftware7485"]},{"@type":"Person","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22","name":"Hopla!\u00a0Tech","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","caption":"Hopla!\u00a0Tech"}}]}},"_links":{"self":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/8359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/comments?post=8359"}],"version-history":[{"count":1,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/8359\/revisions"}],"predecessor-version":[{"id":12067,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/8359\/revisions\/12067"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media\/12345"}],"wp:attachment":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media?parent=8359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/categories?post=8359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/tags?post=8359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}