Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como funciona o agrupamento de ligações em mssql-django e como configurá-lo para a sua aplicação Django.
Como funciona o pool de conexões
Por predefinição, mssql-django utiliza agrupamento de ligações ao nível do driver. O caminho pyodbc padrão usa pooling pyodbc, e o caminho mssql-python usa pooling mssql-python. Quando o Django fecha uma ligação, o driver ativo devolve-a a um pool em vez de fechar a ligação subjacente à base de dados. Pedidos de ligação subsequentes reutilizam ligações agrupadas, o que reduz a sobrecarga de estabelecer novas ligações à base de dados. Para detalhes sobre a seleção de drivers, consulte Selecionar o driver da base de dados para mssql-django.
Configurar o agrupamento de conexões
O agrupamento de ligações é controlado pela definição DATABASE_CONNECTION_POOLING, que é definida ao nível do módulo em settings.py (fora do dicionário 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
| Valor | Comportamento |
|---|---|
True (padrão) |
O agrupamento de ligações está ativado. As ligações fechadas são devolvidas à piscina. |
False |
O agrupamento de ligações ao nível do driver está desativado. O caminho pyodbc define Database.pooling=False, e o caminho mssql-python chama PoolingManager.disable(). |
Quando desativar a agregação de ligações
Considere desativar o agrupamento de ligações nestes cenários:
- Autenticação baseada em tokens: Ao usar tokens de acesso que expiram, as ligações agrupadas podem conter tokens obsoletos.
- Resolução de problemas de ligação: Desativar o agrupamento de ligações simplifica a resolução de problemas, ao garantir que cada pedido cria uma nova ligação.
- Processos de curta duração: Para scripts ou comandos de gestão que fazem algumas consultas e saem, o pooling não traz benefício.
Definições de retentativa de ligação
Independentemente da configuração de agrupamento, pode configurar o comportamento de repetição para tentativas de ligação sem êxito. Para a lista completa de opções de nova tentativa e de tempo limite, consulte Referência de configuração.
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
O Django também fornece uma CONN_MAX_AGE definição que controla quanto tempo o Django mantém uma ligação à base de dados aberta antes de a fechar. Esta definição funciona em conjunto com o pool de ligações do controlador:
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 mais informações sobre CONN_MAX_AGE, consulte a documentação das definições da base de dados Django.
Pontos práticos de partida:
-
CONN_MAX_AGE=0: mais seguro para depuração e trabalhos de curta duração. -
CONN_MAX_AGE=600: bom padrão para muitas aplicações web. -
CONN_MAX_AGE=3600: razoável para serviços estáveis de alto débito após testes de carga.
Note
Quando usas servidores ASGI (como Daphne ou Uvicorn) ou implantações em threads, as ligações persistentes podem infiltrar-se em contextos assíncronos. Se usares CONN_MAX_AGE com um servidor ASGI, define CONN_HEALTH_CHECKS = True nas versões do Django suportadas e testa em condições realistas de concorrência. Para mais informações, consulte a documentação Django sobre gestão de ligações.
CONN_HEALTH_CHECKS valida ligações agrupadas antes de ser reutilizada. Se Django detetar uma ligação obsoleta, abre transparentemente uma nova. Isto acrescenta um pequeno custo de verificação por cada pedido e vale normalmente a pena ativá-lo para processos de longa duração.