ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것
    데이터베이스/최적화 2024. 7. 22. 11:32
    728x90
    반응형

    MyBatis와 같은 ORM 툴을 사용할 때, 동일한 데이터를 가져오기 위해 5번의 쿼리를 호출하는 것과 5개의 쿼리를 WITH 구문을 통해 하나의 쿼리로 요청하는 것 사이에는 성능상의 차이가 있습니다. 이 차이가 발생하는 이유는 여러 가지가 있지만, 주요 원인은 다음과 같습니다:

     

    1. 네트워크 레이턴시:
      • 각 쿼리 호출 시마다 네트워크 요청이 발생합니다. 네트워크 왕복 시간이 누적되면 지연이 발생할 수 있습니다. 커넥션 풀을 사용해도 각 요청마다 네트워크 레이턴시가 존재하기 때문에, 5번의 네트워크 왕복 시간이 1번의 왕복 시간보다 더 큽니다.
    2. 쿼리 실행 준비:
      • 각 쿼리 호출 시마다 데이터베이스는 쿼리 파싱, 최적화, 실행 계획 수립 단계를 거쳐야 합니다. 5번의 쿼리 호출은 이 단계를 5번 반복하는 셈이 됩니다.
      • 하나의 쿼리로 요청하면 이 과정이 한 번만 수행됩니다.
    3. 트랜잭션 관리:
      • 여러 쿼리를 개별적으로 실행하면 각 쿼리마다 트랜잭션 시작, 커밋, 롤백 작업이 이루어질 수 있습니다. 여러 트랜잭션의 시작과 종료는 오버헤드를 유발할 수 있습니다.
      • 하나의 쿼리로 요청하면 하나의 트랜잭션으로 처리되어 트랜잭션 관리가 단순화됩니다.
    4. 데이터베이스 작업 오버헤드:
      • 데이터베이스는 쿼리 실행 시 메모리 할당, 락 설정, 인덱스 사용 등을 포함한 다양한 작업을 수행합니다. 이러한 작업들이 여러 번 반복되면 오버헤드가 누적될 수 있습니다.
    5. 결과 처리:
      • 하나의 쿼리로 요청하면 결과 집합을 한 번만 반환하고 처리하므로 효율적입니다.
    6. 리소스 경합:
      • 하나의 쿼리로 요청하면 이러한 리소스 경합이 줄어듭니다.

    따라서, 커넥션 풀을 사용하더라도 여러 번의 쿼리 호출이 하나의 쿼리 요청보다 성능이 떨어질 수 있는 다양한 이유가 존재합니다. 쿼리 최적화와 효율적인 데이터베이스 사용을 위해 가능한 한 쿼리 호출 횟수를 줄이고, 데이터베이스 내부에서 최적화된 방식으로 데이터를 가져오는 것이 중요합니다.

    728x90
    반응형
Designed by Tistory.