Estoy ejecutando SQL Server 2008 R2 SP1, en un cuadro de Windows Server 2008. Tengo un script .NET que se ejecuta desde Visual Studio 2010 que hace lo siguiente:
- Llega a la base de datos.
- Hace un cambio
- Iterates
El número total de veces que iterará es 150, sin embargo, se detiene en 100 conexiones y no puedo entender por qué. Podría ajustar mi script para usar un solo hilo, pero preferiría saber dónde me falta una configuración de conexión máxima, ya que será más útil saberlo para futuras referencias.
Aquí es donde he comprobado hasta ahora:
- Cadena de conexión SQL en Visual Studio 2010 (se establece en 1000)
- Propiedades de conexión de la instancia de la base de datos SSMS (se establece en 0 [infinito] conexiones de usuario)
- Busqué en Google alguna información sobre Server 2008, parece que puede manejar más de 100 conexiones
- Revisé mi código junto con el
SP_WHO2
que proporciona más información sobre las conexiones lógicas, al ver que el número de conexiones comienza en 52 y los errores de script con el error "Se han alcanzado las conexiones agrupadas máximas" en 152 conexiones lógicas. - Cambió la cadena de conexión para usar
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
No estoy seguro de dónde más verificar, sé que tengo muchas partes móviles aquí, pero tengo la sensación de que me falta una configuración máxima de la piscina en alguna parte.
sql-server
Sean Long
fuente
fuente
System.Data.SqlClient
predeterminado es 100, por lo que verá el agotamiento del grupo de conexiones).Respuestas:
SQL Server permite un máximo de 32767 conexiones de forma predeterminada. Se puede modificar usando
sp_configure
. Para ver su configuración actual para esta configuración, use la siguiente consulta:De forma predeterminada, debería ver un máximo de 32767,
value_in_use
igual a 0 (use la configuración predeterminada). Si esto se ha modificado, puede volver a configurar SQL Server para usar otros valores como se describe en el enlace.También debe revisar cuántas conexiones se están haciendo realmente , ya que podría haber más actividad fuera de su aplicación (o su aplicación está haciendo más conexiones de las que cree). Deberá consultar Estadísticas generales -> Conexiones lógicas en perfmon o consultar los valores en
sys.dm_os_performance_counters
(cntr_value mostrará el valor actual del punto en el tiempo):fuente
En su cadena de conexión, especifique
max pool size=<your desired max pool size>
. En otras palabras, si desea cambiar el tamaño máximo de la agrupación al valor 500, su cadena de conexión podría parecerse a esto:Obviamente estoy asumiendo mucho con sus otros parámetros, pero esto debería darle una buena idea de cómo proceder. La agrupación de conexiones es la aplicación del proveedor del lado del cliente. Es el cliente el que deberá especificar esta configuración de tamaño máximo de grupo, a través de la cadena de conexión.
Además, asegúrese de cerrar o deshacerse de sus conexiones correctamente, de lo contrario, atará las conexiones. Algo como esto (C #):
El
using
bloque (en C #) llamaIDisposable.Dispose()
al finalizar. También podría implementarSqlConnection.Dispose()
oSqlConnection.Close()
en elfinally
bloque de untry/catch/finally
bloque.Referencia: documentación de MSDN sobre la propiedad SqlConnection.ConnectionString
fuente
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
SqlConnection.ConnectionString
la operación en particular. Esa sería la forma más fácil. Simax pool size
no está allí, son 100 entonces.