인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Jay Null님의 프로필 이미지

작성한 질문수

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

작성

·

2.6K

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 인턴님의 프로필 이미지

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

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

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

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

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

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

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

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

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

Jay Null님의 프로필 이미지

작성한 질문수

질문하기