강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Jay Null님의 프로필 이미지
Jay Null

작성한 질문수

MyBatis 쿼리 속도가 너무 느립니다.

작성

·

2.7K

0

이클립스 Maven으로 프로젝트를 만들어서 백엔드를 만들고 있습니다.

버전은 아래와 같습니다.

 

Java 17.0.7

Spring Boot 2.2.2 Release

mybatis-spring-boot-starter 2.1.0

PostgreSQL 13(Max-Connection: 1,000)

 

모놀리식 애플리케이션으로 배포되며, 서비스 특성 상 매 초마다 50개 이상의 insert 쿼리 및 처리 로직이 실행되고 있습니다. 조회하려는 테이블엔 10,000개 이상의 데이터가 쌓여 있습니다.

 

검색해보니 fetchSize를 설정하면 속도가 빨라진다 하여 mapper xml <select> 부분에 fetchSize="1000"을 추가해도 결과는 같았고, 위에서 언급한 insert 및 처리 로직을 끄고 쿼리를 실행하면 정상적으로 빠르게 실행되었습니다.

 

이런 경우엔 어떻게 해야 쿼리 속도를 빠르게 할 수 있나요?

도저히 관련 자료를 찾을 수 없어서 질문드립니다ㅠ

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

MyBatis의 쿼리 속도가 느려진다는 문제에 대해 안타깝게도 문제를 확인하기 위해서는 더 많은 정보가 필요합니다. 그러나, 몇 가지 가능한 원인과 해결 방법을 제시해 드릴 수 있습니다.

  1. 데이터베이스 인덱스: 쿼리 성능을 향상시키기 위해 적절한 인덱스를 사용하고 있는지 확인해 보세요. 조회하는 테이블에 적절한 인덱스가 없을 경우 성능이 저하될 수 있습니다.

  2. 캐싱: MyBatis는 자체적으로 결과를 캐싱하여 동일한 쿼리의 반복 호출에 대한 성능을 높일 수 있습니다. 하지만 캐싱을 적절히 사용하지 않으면 캐시 관리 비용 때문에 성능 저하가 발생할 수 있습니다. 지연 로딩을 최소화하고, 필요한 경우 쿼리 결과를 캐싱하여 성능을 향상시킬 수 있습니다.

  3. 데이터베이스 커넥션 풀 설정: 데이터베이스 커넥션 풀의 설정을 확인해 보세요. Max-Connection 수를 1,000으로 설정했지만, 실제로 동시에 처리 가능한 커넥션 수는 시스템 스펙에 따라 다를 수 있습니다. 또한, 커넥션 풀의 크기를 적절히 조절하여 성능을 최적화할 수 있습니다.

  4. 쿼리 튜닝: 쿼리 튜닝을 통해 쿼리의 실행 계획을 최적화하고, 불필요한 조인이나 연산을 줄일 수 있습니다. EXPLAIN 문을 사용하여 쿼리의 실행 계획을 확인하고, 성능에 영향을 주는 부분을 개선해 보세요.

  5. 배치 처리: 매 초마다 50개 이상의 insert 쿼리 및 처리 로직을 실행한다고 하셨는데, 이를 배치 처리로 변경해 보실 수 있을 것입니다. MyBatis에서는 파라미터로 List를 받아 일괄 처리할 수 있는 기능을 제공하고 있습니다. 이를 이용하여 여러 개의 쿼리를 한 번에 처리하면 성능 향상에 도움이 될 수 있습니다.

  6. 로깅: MyBatis의 로깅 레벨을 조정하여 실제로 어떤 쿼리가 실행되는지, 어떤 작업이 수행되고 있는지 확인해 보세요. 로깅을 통해 성능 저하의 원인을 파악하고 개선할 수 있습니다.

이 외에도 성능 향상을 위한 다양한 방법이 있을 수 있습니다. 하지만 문제를 자세히 파악하기 위해서는 성능 프로파일링 도구를 사용하거나, 더 많은 세부 정보를 제공해 주셔야 합니다. 가능한 원인과 해결 방법을 대략적으로 안내해 드렸으니 참고하시길 바랍니다. 추가로 질문이나 의견이 있으시면 말씀해주세요. 좋은 결과가 있기를 바라요.

Jay Null님의 프로필 이미지
Jay Null

작성한 질문수

질문하기