PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Django ORM deixa conexões ociosas no banco de dados Postgres


aparentemente você não desconecta. Usando db.close_connection() após o término da consulta ajudaria. Além disso, se eu acertar CONN_MAX_AGE para algum valor curto poderia ajudar. E considere usar algum pooler de sessão, por exemplo, pgbouncer para conexões django. Dessa forma, se você tiver muitas conexões, ele aguardará (ou reutilizará o anterior, dependendo da configuração) em vez de abortar a execução com erro ...

atualizar :explicação por que eu proponho

de documentos

Então, se você tiver mais threads, postgres max_connections , você obtém o erro mencionado. Cada thread pode reutilizar a conexão se CONN_MAX_AGE não tiver passado. Sua configuração é 0, portanto, a conexão deve ser fechada após a conclusão da consulta, mas você vê 100 conexões ociosas. Então eles não estão fechando. O grande número de conexões significa que elas também não são reutilizadas (lógica:se você tivesse 100 consultas paralelas, elas não ficariam todas ociosas, e se você tiver tantas, elas não serão reutilizadas - abrindo novas). Então eu acho que o django não os fecha como prometido - então CONN_MAX_AGE definido como 0 não funciona no seu código. Então proponho usar db.close_connection() forçar a desconexão e configurar CONN_MAX_AGE para algum valor pequeno pode mudar o comportamento.