-
DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것데이터베이스/최적화 2024. 7. 22. 11:32728x90반응형
MyBatis와 같은 ORM 툴을 사용할 때, 동일한 데이터를 가져오기 위해 5번의 쿼리를 호출하는 것과 5개의 쿼리를 WITH 구문을 통해 하나의 쿼리로 요청하는 것 사이에는 성능상의 차이가 있습니다. 이 차이가 발생하는 이유는 여러 가지가 있지만, 주요 원인은 다음과 같습니다:
- 네트워크 레이턴시:
- 각 쿼리 호출 시마다 네트워크 요청이 발생합니다. 네트워크 왕복 시간이 누적되면 지연이 발생할 수 있습니다. 커넥션 풀을 사용해도 각 요청마다 네트워크 레이턴시가 존재하기 때문에, 5번의 네트워크 왕복 시간이 1번의 왕복 시간보다 더 큽니다.
- 쿼리 실행 준비:
- 각 쿼리 호출 시마다 데이터베이스는 쿼리 파싱, 최적화, 실행 계획 수립 단계를 거쳐야 합니다. 5번의 쿼리 호출은 이 단계를 5번 반복하는 셈이 됩니다.
- 하나의 쿼리로 요청하면 이 과정이 한 번만 수행됩니다.
- 트랜잭션 관리:
- 여러 쿼리를 개별적으로 실행하면 각 쿼리마다 트랜잭션 시작, 커밋, 롤백 작업이 이루어질 수 있습니다. 여러 트랜잭션의 시작과 종료는 오버헤드를 유발할 수 있습니다.
- 하나의 쿼리로 요청하면 하나의 트랜잭션으로 처리되어 트랜잭션 관리가 단순화됩니다.
- 데이터베이스 작업 오버헤드:
- 데이터베이스는 쿼리 실행 시 메모리 할당, 락 설정, 인덱스 사용 등을 포함한 다양한 작업을 수행합니다. 이러한 작업들이 여러 번 반복되면 오버헤드가 누적될 수 있습니다.
- 결과 처리:
- 하나의 쿼리로 요청하면 결과 집합을 한 번만 반환하고 처리하므로 효율적입니다.
- 리소스 경합:
- 하나의 쿼리로 요청하면 이러한 리소스 경합이 줄어듭니다.
따라서, 커넥션 풀을 사용하더라도 여러 번의 쿼리 호출이 하나의 쿼리 요청보다 성능이 떨어질 수 있는 다양한 이유가 존재합니다. 쿼리 최적화와 효율적인 데이터베이스 사용을 위해 가능한 한 쿼리 호출 횟수를 줄이고, 데이터베이스 내부에서 최적화된 방식으로 데이터를 가져오는 것이 중요합니다.
728x90반응형'데이터베이스 > 최적화' 카테고리의 다른 글
인덱스 온리 스캔 불가능 (0) 2024.07.17 postgresql 실행계획 파헤치기 (0) 2024.05.10 SQL 인덱스 기본 사용법 - 수정중 (0) 2024.05.02 SQL?옵티마이저?프로시저?SQL최적화 방법?소프트파싱?하드파싱?는 무엇일까? with oracle (0) 2024.04.08 - 네트워크 레이턴시: