이 문서에서는 연결 풀링이 작동하는 mssql-django 방식과 Django 애플리케이션에 맞게 구성하는 방법을 설명합니다.
연결 풀링 작동 방식
기본적으로 mssql-django 드라이버 레벨 연결 풀링을 사용합니다. 기본 pyodbc 경로는 pyodbc 풀링을 사용하고, mssql-python 경로는 mssql-python 풀링을 사용합니다. Django가 연결을 닫으면, 활성 드라이버는 기본 데이터베이스 연결을 닫지 않고 이를 풀로 반환합니다. 후속 연결 요청은 풀링된 연결을 다시 사용하므로 새 데이터베이스 연결 설정의 오버헤드가 줄어듭니다. 드라이버 선택 세부 사항은 mssql-django의 데이터베이스 드라이버 선택을 참조하세요.
연결 풀링을 구성합니다
연결 풀링은 DATABASE_CONNECTION_POOLING의 모듈 수준에 배치된 settings.py 설정으로 제어되며(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
| 가치 | Behavior |
|---|---|
True(기본값) |
연결 풀링을 사용할 수 있습니다. 닫은 연결은 풀로 반환됩니다. |
False |
드라이버 레벨 연결 풀링은 비활성화되어 있습니다. pyodbc 경로는 Database.pooling=False를 설정하고, mssql-python 경로는 PoolingManager.disable()를 호출합니다. |
연결 풀링을 사용하지 않도록 설정하는 경우
다음 시나리오에서 연결 풀링을 사용하지 않도록 설정하는 것이 좋습니다.
- 토큰 기반 인증: 만료되는 액세스 토큰을 사용하는 경우 풀된 연결에 부실 토큰이 포함될 수 있습니다.
- 연결 문제 디버깅: 풀링을 사용하지 않도록 설정하면 각 요청이 새 연결을 만들도록 하여 문제 해결을 간소화합니다.
- 수명이 짧은 프로세스: 몇 가지 쿼리를 수행하고 종료하는 스크립트 또는 관리 명령의 경우 풀링이 이점을 추가하지 않습니다.
연결 다시 시도 설정
풀링 설정에 관계없이 실패한 연결 시도에 대한 재시도 동작을 구성할 수 있습니다. 재시도 및 시간 제한 옵션의 전체 목록은 구성 참조를 참조하세요.
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
Django는 또한 Django를 닫기 전에 데이터베이스 연결을 열어 두는 기간을 제어하는 설정을 제공합니다 CONN_MAX_AGE . 이 설정은 운전자 수준의 연결 풀링과 함께 작동합니다:
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",
},
},
}
자세한 CONN_MAX_AGE내용은 Django 데이터베이스 설정 설명서를 참조하세요.
실용적인 시작점:
-
CONN_MAX_AGE=0: 디버깅 및 수명이 짧은 작업에 가장 안전합니다. -
CONN_MAX_AGE=600: 많은 웹앱에 대한 좋은 기본값입니다. -
CONN_MAX_AGE=3600: 부하 테스트 후 안정적인 높은 처리량 서비스에 적합합니다.
메모
ASGI 서버(예: Daphne, Uvicorn)나 스레드 배포를 사용할 때, 지속적인 연결이 비동기 컨텍스트를 통해 누출될 수 있습니다.
CONN_MAX_AGE를 ASGI 서버와 함께 사용하는 경우, 지원되는 Django 버전에서는 CONN_HEALTH_CHECKS = True을 설정하고 실제와 유사한 동시성 환경에서 테스트하세요. 자세한 내용은 연결 관리에 대한 Django 설명서를 참조하세요.
CONN_HEALTH_CHECKS 다시 사용하기 전에 풀된 연결의 유효성을 검사합니다. Django가 부실 연결을 감지하면 새 연결이 투명하게 열립니다. 이렇게 하면 요청당 소규모의 검사 비용이 추가되지만, 장기간 실행되는 프로세스에는 일반적으로 활성화할 가치가 있습니다.