Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se explica cómo funciona la agrupación de conexiones en mssql-django y cómo configurarla para su aplicación Django.
Funcionamiento de la agrupación de conexiones
Por defecto, mssql-django utiliza pooling de conexiones a nivel de controlador. La ruta predeterminada de pyodbc usa la agrupación de conexiones de pyodbc, y la ruta de mssql-python usa la agrupación de conexiones de mssql-python. Cuando Django cierra una conexión, el controlador activo la devuelve a un pool en lugar de cerrar la conexión subyacente a la base de datos. Las solicitudes de conexión posteriores reutilizan las conexiones agrupadas, lo que reduce la sobrecarga de establecer nuevas conexiones de base de datos. Para detalles sobre la selección de controladores, consulte Seleccionar el controlador de base de datos para mssql-django.
Configuración de la agrupación de conexiones
La agrupación de conexiones se controla mediante la configuración DATABASE_CONNECTION_POOLING, que se coloca a nivel de módulo en settings.py (fuera del diccionario DATABASES):
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
# Set to False to disable driver-level connection pooling
DATABASE_CONNECTION_POOLING = False
| Importancia | Comportamiento |
|---|---|
True (valor predeterminado) |
La agrupación de conexiones está habilitada. Las conexiones cerradas se devuelven al grupo. |
False |
La agrupación de conexiones a nivel de controlador está desactivada. La ruta de pyodbc establece Database.pooling=False, y la ruta de mssql-python llama a PoolingManager.disable(). |
Cuándo deshabilitar la agrupación de conexiones
Considere la posibilidad de deshabilitar la agrupación de conexiones en estos escenarios:
- Autenticación basada en tokens: al usar tokens de acceso que expiran, las conexiones agrupadas pueden contener tokens obsoletos.
- Solución de problemas de conexión: deshabilitar la agrupación de conexiones simplifica la solución de problemas, ya que garantiza que cada solicitud establezca una conexión nueva.
- Procesos de corta duración: en el caso de scripts o comandos de administración que realizan algunas consultas y salidas, la agrupación no agrega ninguna ventaja.
Configuración de reintento de conexión
Independientemente de la configuración del grupo, puedes configurar el comportamiento de reintento para los intentos de conexión erróneos. Para obtener la lista completa de opciones de reintento y tiempo de espera, consulte Referencia de configuración.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"connection_retries": 3,
"connection_retry_backoff_time": 10,
"connection_timeout": 30,
},
},
}
CONN_MAX_AGE de Django
Django también proporciona una CONN_MAX_AGE configuración que controla cuánto tiempo Django mantiene abierta una conexión de base de datos antes de cerrarla. Esta configuración funciona junto con la agrupación de conexiones a nivel de conductor:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"CONN_MAX_AGE": 600, # Keep connections open for 10 minutes
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Para obtener más información sobre CONN_MAX_AGE, consulte la documentación sobre la configuración de la base de datos de Django.
Puntos de partida prácticos:
-
CONN_MAX_AGE=0: la opción más segura para la depuración y los trabajos de corta duración. -
CONN_MAX_AGE=600: buen valor predeterminado para muchas aplicaciones web. -
CONN_MAX_AGE=3600: razonable para servicios con un alto rendimiento constante tras las pruebas de carga.
Note
Cuando se utilizan servidores ASGI (como Daphne o Uvicorn) o despliegues con subprocesos, las conexiones persistentes pueden filtrarse entre contextos asíncronos. Si usa CONN_MAX_AGE con un servidor ASGI, configure CONN_HEALTH_CHECKS = True en las versiones de Django compatibles y pruebe en condiciones de concurrencia realistas. Para obtener más información, consulte la documentación de Django sobre la administración de conexiones.
CONN_HEALTH_CHECKS valida las conexiones agrupadas antes de reutilizarlas. Si Django detecta una conexión obsoleta, se abre de forma transparente una nueva. Esto agrega un pequeño costo de comprobación por solicitud y normalmente vale la pena habilitar para procesos de larga duración.