transaction 시작 → 커넥션 할당 → transaction 끝(COMMIT) → 커넥션 반환
django 사용 시 주의: 트랜잭션 단위로 커넥션이 반환되기 때문에 server side 커서가 활성화 된 상태일 경우 문제 발생. 반드시 server side cursor는 disable 처리
# DATABASES
DATABASES = {
'default': {
...
"DISABLE_SERVER_SIDE_CURSORS": True,
},
}
# DISABLE_SERVER_SIDE_CURSORS=False(default)일 경우에만 사용 가능
for obj in Model.objects.all().iterator(chunk_size=...):
...
주의: transaction 모드는 client-side cursor로 동작하기 때문에 스트리밍, 페이지네이션 기능 불가(queryset.iterator() 사용 X) → 대량의 데이터를 메모리에 올려야할 경우
→ mode 별 db alias 분리
→ batch 쿼리 사용
→ ETL 도구 활용
detail scenario