sábado, 31 de enero de 2015

!Apunte semanal - Configurando el pool de conexiones de Entity Framework.


Sin lugar a dudas uno de los aspectos más importantes y que pueden afectar favorablemente o desfavorablemente el rendimiento de nuestras aplicaciones, es el acceso a fuentes de datos, ya que implica un costo considerable establecer conexión con dichas fuentes. Es por eso que una técnica muy utilizada para lidiar con este problema es el connection pooling o pool de conexiones, el cual permite mantener un número definido de conexiones abiertas  y disponibles para que la aplicación o aplicaciones puedan usarlas sin tener que esperar a abrir una conexión, y es el pool quien se encarga de mantener estas conexiones y distribuirlas según se requiera.


Entity Framework a diferencia de otros ORM's no maneja directamente el pool de sesiones, sino que lo hace a través de ADO.Net, quien se encarga de manejar los pool para los diferentes Data Providers.

¿Y cómo puedo configurar este pool de Ado.Net?

ADO.Net maneja un pool de conexiones por cada cadena de conexión que tengamos en nuestra aplicación, quiere decir que si nos conectamos a dos bases de datos diferentes habrá un pool para cada una de ellas, o si generamos cadenas de conexión dinámicamente en tiempo de ejecución tendremos N pools de conexiones dependiendo de las que generemos (Esto de generar cadenas de conexión en tiempo de ejecución, es muy contraproducente para el manejo del pool), es por esto que si queremos configurar el pool de conexiones debemos hacerlo modificando los siguientes parámetros:

Parámetros a modificar en la cadena de conexión:

<add name="ConnectioName" connectionString="data source=TAVOPC;initial catalog=PoolDemo;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework;
Connection Lifetime=120; Max Pool Size=20; Min Pool Size = 1; Pooling=True;" providerName="System.Data.SqlClient" />

Como podemos ver hacemos uso de cuatro parámetros en la cadena de conexión que corresponden a la configuración del pool, aunque sus nombres son muy dicientes veamos de que se trata cada uno:

Connection LifeTime: Define el tiempo de duración de las conexiones abiertas, se compara la hora en que se creó la conexión con el tiempo actual, para determinar según esta variable si se destruye la conexión o si permanece en pool, su valor esta dado en segundos y su valor por defecto es 0 que indica configurar el mayor tiempo de duración permitido.

Max Pool Size: Define el número máximo de conexiones gestionadas por el pool.

Min Pool Size: Define el número mínimo de conexiones gestionadas por el pool.

Pooling: Define si se va a utilizar el pool para gestionar las conexiones o no.

Bueno y eso es todo de este apunte semanal, espero sea de utilidad.

Saludos y buena suerte!

8 comentarios:

  1. Compadre, que buen apunte. Estas volando, estos aportes si que valen la pena.

    ResponderEliminar
    Respuestas
    1. Gracias mi bro, que bueno que te haya sido de utilidad, un abrazo!

      Eliminar
  2. Como define el max pool size para un sitio web?

    ResponderEliminar
    Respuestas
    1. Esto aplica para cualquier tipo de aplicación que use EntityFramewor, independientemente si es web o de escritorio, se puede establecer el MaxPoolSize en la cadena de conexión, el valor depende de la concurrencia de usuarios que tengamos.

      Eliminar
  3. Respuestas
    1. Hola amigo que bueno que te haya servido este apunte sobre el pool de conexiones de EntityFramework.

      Eliminar
  4. Gustavo yo use entity pero no he configurado como indicas, lo mejor es siempre que se use entity adicionar estas configuraciones ??

    ResponderEliminar
    Respuestas
    1. Sergio, por lo general con la configuración por defecto la mayoría de aplicaciones funcionan muy bien, surge la necesidad de este tipo de configuraciones en casos particulares de nuestras aplicaciones, por ejemplo, el aumento de concurrencia de usuarios, nos puede llevar a modificar estos atributos de configuración para aumentar el número de conexiones disponibles en el pool por ejemplo.

      Eliminar