2/11/2017
Una introducción a los pools de conexiones en Payara Server
Buy Support Online
Blog Archive
Blog Español
Beginner's Guides
Production Resources
Una na int introd roduc ucción ción a los pools de conexiones en Payara Server Tweet
Share
0
Like 1 Share
by Andy Overton
En este articulo vamos a realizar una introducción general a los pools de conexiones y las mejores practicas de configuración para Payara Server.
http://blog.payara.fish/una-introdu http://blog.payara.fish/una-introduccion-a-los-pools-de-c ccion-a-los-pools-de-conexiones-en-payara-s onexiones-en-payara-server?utm_campa erver?utm_campaign=Payara%20Blog&u ign=Payara%20Blog&utm_content=62592 tm_content=62592370&utm… 370&utm…
1/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Un pool de conexiones es un almacén de conexiones de bases de datos relacionales que se pueden utilizar y, más importante, reutilizar para conectar a una base de datos relacional. See here for the original version in English language.
Las conexiones a bases de datos suelen ser caras en su creación y mantenimiento. Esto se debe generalmente al esfuerzo que el servidor debe realizar para: Establecer una conexión de red al servidor de la base de datos. Analizar la información de la cadena de conexión. Realizar la autenticación del usuario. Inicializar la conexión de la base de datos. Establecer los contextos de transaccionalidad. Ahora, si tienes una aplicación web con sólo un usuario puedes simplemente crear una conexión a la base de datos al comienzo de la sesión de usuario y cerrarla al final de esta. Sin embargo, este es un escenario altamente improbable. Ahora, imagina un escenario más realista donde tu aplicación web va a ser accedida por cientos o miles de usuarios. Si cada sesión de usuario crea una conexión a la base de datos, tus usuarios experimentarán un retardo mientras esa conexión se configura y el funcionamiento general de tu sistema se deteriorará. Entonces, la respuesta a la pregunta sobre porque son necesarios los pools de conexiones, es porque mejoran tanto el rendimiento como la escalabilidad de tu sistema. http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
2/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
En lugar de crear nuevas conexiones cada vez que una es requerida, un pool de conexiones se crea cuando el servidor de aplicaciones es puesto en marcha. Estas conexiones se pueden utilizar y reutilizar cuantas veces sea necesario. Cuando una nueva conexión se necesita se busca una conexión disponible en el pool de conexiones. Si hay una disponible se devuelve al solicitante. En caso contrario, el pool crea una nueva conexión en caso de que haya conexiones disponibles de acuerdo a su configuración; de no ser así, la solicitud quedará encolada hasta que haya conexiones disponibles. Una vez que se ha terminado con la conexión, en lugar de cerrarla se devuelve al pool de conexiones para ser utilizada para un nuevo solicitante. De acuerdo, esta es la teoría, pero, como funciona en la práctica?
Para esta demostración práctica los siguientes elementos serán utilizados: Sistema Operativo - Ubuntu 12 Java Version - 1.7.0_05 App Server - Payara 4.1.1.161 Database - Derby Si estas utilizando diferentes versiones de estos elementos, los resultados pueden variar.
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
3/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Primero, extraer los ficheros zip del JDK y Payara Server en un directorio de tu elección. Para el propósito de esta demo los he instalado en mi directorio de inicio: /home/andy
Por conveniencia añade los directorios bin de Java y Payara Server al PATH y establece la variable de entorno JAVA_HOME al directorio donde has descomprimido Java. En mi máquina están configuradas de la siguiente manera: PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/u JAVA_HOME=/home/andy/jdk1.7.0_05
Lo primero, es arrancar una instancia Payara Server. Esto se puede hacer desde una terminal de línea de comandos con el siguiente comando: asadmin start-domain
Una vez que está arrancado puedes acceder a la consola en http://localhost:4848 En el panel izquierdo seleccionar Resources - JDBC - JDBC Connection Pools Haz click en New e introducir los siguientes valores: Pool Name - test-pool http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
4/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Resource Type - javax.sql.DataSource Driver Vendor - Derby30 Haz click en Next y después en Finish en la siguiente pantalla, aceptando los valores por defecto.
Añade las propiedades mostradas en la siguiente imagen al pool de conexiones entrando en la pestaña de propiedades adicionales del pool de conexiones.
Haz click en el nombre del pool de conexiones (test-pool). Haz click en el botón Ping en la parte superior de la pantalla. Deberías ver un mensaje indicando que el ping ha tenido éxito (Ping Succeeded).
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
5/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
También puedes crear un pool de conexiones utilizando la herramienta de línea de comandos asadmin como se muestra a continuación, sustituyendo tu password por la de test: asadmin create-jdbc-connection-pool --datasourceclassname com.mysql.jdbc.
Para probar la conexión desde la línea de comandos ejecuta el siguiente comando: asadmin ping-connection-pool test-pool
De acuerdo, ahora que tenemos creado el pool de conexiones vamos a ver algunas buenas prácticas respecto a como configurarlo.
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
6/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Los pools de conexiones deben ser dimensionados de forma apropiada para atender al máximo número de conexiones concurrentes. El tamaño máximo debe establecerse en concordancia con el número máximo de peticiones de clientes que tu sistema puede procesar. Si tu aplicación recibe 100 peticiones y cada una de ellas requiere una conexión a base de datos, si tu pool de conexiones es menor que 100, algunas de esas peticiones tendrán que esperar a que una nueva conexión esté disponible. El tamaño mínimo de un pool de conexiones asegura que el número más pequeño de conexiones a la base de datos siempre se establece al iniciar el servidor, esto quiere decir que si tienes un pool con un tamaño mínimo de 10 y recibes 10 peticiones, entonces todas pueden recuperar una conexión a la base de datos sin esperar a que el pool cree una nueva conexión. Siempre hay una compensación al configurar estos valores, ya que el valor mínimo requiere que dichas conexiones se mantengan activas a pesar de la carga del sistema, mientras que el valor máximo puede requerir un potencial número alto de conexiones concurrentes a la base de datos. Estos valores serán diferentes para todos los casos. No hay números mágicos por lo que es necesario que entiendas tu aplicación, cuál será carga esperada, tanto en escenarios estables como en el peor escenario, monitorizando detectar cambios en ésta y configurar los valores de la manera adecuada.
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
7/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Haz click en el nombre del pool de conexiones y bajo Pool Settings encontrarás Initial and Minimum Pool Size and Maximum Pool size. Establecelos a los tamaños que necesites.
Para establecer el tamaño inicial y mínimo del pool asadmin set resources.jdbc-connection-pool.test-pool.steady-pool-size=10
Para establecer el tamaño máximo del pool asadmin set resources.jdbc-connection-pool.test-pool.max-pool-size=200
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
8/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Validar la conexión asegura que una conexión no sea asignada a aplicaciones que la soliciten en caso de que esta se encuentre en un estado "incorrecto". La validación de la conexión siempre es una compensación entre la garantía de la validez de una conexión y el impacto en el desempeño causado por esta validación. Habrá un impacto negativo en el funcionamiento por tener que devolver una conexión no válida para la aplicación y solicitar una nueva, por lo que encontrar el equilibrio correcto es la clave. Antes de utilizar una conexión del pool se envía una consulta simple para probar la conexión. Si hay algún problema con la conexión esta se borra del pool y se utiliza otra. El problema aquí es que si existe una situación tal como si la base de datos no se encuentre disponible mientras se tenga un numero alto de conexiones cada una de estas conexiones serán probadas y eliminadas. Para evitar esto puedes establecer la validación de la conexión para que en el caso de que una conexión falle, todas las conexiones serán cerradas.
Hacer click en el nombre del pool, seleccionar la pestaña Advanced, desplazarse hacia abajo en la pantalla hasta Connection Validation y seleccionar las siguientes configuraciones: Connection Validation requerida. Validation Method - custom-validation Validation Class Name - org.glassfish.api.jdbc.validation.DerbyConnectionValidation http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm…
9/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Desde la misma pantalla también puedes establecer si cerrar todas las conexiones en caso de fallo.
Para encender la validación de la conexión: asadmin set resources.jdbc-connection-pool.test-pool.connection-validatio asadmin set resources.jdbc-connection-pool.test-pool.validation-classname asadmin set resources.jdbc-connection-pool.test-pool.is-connection-valida
También puedes configurar si cerrar todas las conexiones en caso de fallo con el siguiente comando: asadmin set resources.jdbc-connection-pool.test-pool.fail-all-connections
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
10/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
La detección de fugas de sentencias y conexiones no cerradas te permite establecer tiempos de espera para que en el evento de que una sentencia SQL o una conexión no haya sido cerrada por una aplicación, el evento pueda ser registrado y/o estas sean cerradas de forma automática. En un entorno de pruebas recomendaría hacer uso de esta funcionalidad para registrar las fugas detectadas pero NO cerrarlas de forma automática. Sin embargo, en producción recomendaría que las fugas sean cerradas. Si has probado lo suficiente no debería haber ninguna, pero si hay no quieres dejar fugas abiertas. Un software de monitorización debe ser configurado para alertar todas las fugas detectadas para que una investigación profunda pueda ser llevada a cabo de forma que se puedan aplicar las correcciones necesarias. Por defecto estos valores están configurados a 0 por lo que a detección está apagada.
Hacer click en el nombre del pool, seleccionar la pestaña Advanced, desplazarse hacia abajo en la pantalla hasta Connection Settings y establecer los valores para Connection Leak Timeout y Statement Leak Timeout
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&utm… 11/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Puedes establecer los valores de tiempo de espera con los siguientes comandos: asadmin set resources.jdbc-connection-pool.test-pool.statement-leak-timeo asadmin set resources.jdbc-connection-pool.test-pool.connection-leak-time
Una vez estos valores son configurados si pérdidas de conexión o sentencia son detectadas verás mensajes similares al siguiente en la siguiente entrada del log del servidor. A potential connection leak detected for connection pool test-pool. The stack trace of the thread is provided below: A potential statement leak detected for connection pool test-pool. The stack trace of the thread is provided below: http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
12/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
En este punto puedes volver a tu equipo de desarrollo y y hacer que investiguen la causa inicial, o golpearlos en la cabeza, dependiendo de tu estilo de gestión :)
Bien, eso es todo para este blog. Hemos dado un vistazo corto a los pools de conexiones, como crearlos y configurarlos en Payara Server junto algunas pocas de las buenas practicas a seguir que se deben considerar. Como con toda configuración de servidor siempre debes mirar de cerca las necesidades de tu aplicación antes de realizar cambios. Siempre se deben realizar pruebas de desempeño y pruebas de carga de tu aplicación para determinar la mejor configuración, particularmente antes de hacer cambios en producción. Un tamaño no sirve para todos! Una vez hayas decidido sobre la configuración óptima deberías monitorizar y reevaluar regularmente para asegurarte de que siempre estás utilizando la configuración óptima.
See the English language version here.
Comments
First Name* Juan
Last Name Rodriguez
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
13/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
Email*
Website
[email protected]
Comment*
Subscribe to follow-up comments for this post
Escriba el texto
Submit Comment
Email*
[email protected]
Notification Frequency*
Instant Daily Weekly Monthly Subscribe
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
14/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
how-to (72) what's new (53) Payara Micro (52) see all
Mike Croft (27) Andrew Pielage (22) Fabio Turizo (22) Steve Millidge (19) Dominika Tasarz (18) see all
November 2017 (1) October 2017 (5) September 2017 (5) August 2017 (7) July 2017 (7) see all
ABOUT PAYARA
Payara Server - Derived from GlassFish, with 24/7 Production Support. Payara Server is a drop in replacement for GlassFish Server Open Source Edition, with the peace of mind of quarterly releases containing enhancements, bug fixes http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
15/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
and patches.
SIGN UP FOR PAYARA NEWS
[email protected]
Go
CONTACT AND INFO
Contact Us Site Map Legal & Privacy Cookies
FOLLOW PAYARA
LATEST FROM THE BLOG
Payara Server Basics Part 5 - Configuring Sticky Sessions for Payara Server with Apache Web Server
Java EE Presentations at JavaOne 2017
© Payara 2017. All rights reserved. byFoundation Hughes Media GlassFish, Java & Java EE are registered trademarks of Oracle and/or its affiliates. Payara and its logos are a trademarkWebsite of Payara
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
16/17
2/11/2017
Una introducción a los pools de conexiones en Payara Server
http://blog.payara.fish/una-introduccion-a-los-pools-de-conexiones-en-payara-server?utm_campaign=Payara%20Blog&utm_content=62592370&ut…
17/17