Classroom 테이블에서 Select Query 병목 문제를 해결하기 위한 최적화 전략 탐구: 라이브 강의 여부(is_live) 판단 쿼리의 성능 개선 방안 #46
GoByeonghu
started this conversation in
Deepdive
Replies: 1 comment
-
Classroom 테이블에서 Select Query 병목 문제를 해결하기 위한 최적화 전략 탐구: 라이브 강의 여부(is_live) 판단 쿼리의 성능 개선 방안 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
개요
문제 상황
관계형 데이터 베이스로 구현한 데이터베이스 중 Classroom 테이블에 Select query의 병목이 예상된다.
Classroom 테이블은 페이지에서 가장 많은 api요청을 감당한다. 특히 is_live라는 라이브 강의 진행중인지 여부를 판단하는 칼럼이 있는데, 메인 페이지에 라이브 중인 강의를 표기하며, 라이브 강의 여부를 판단하는 쿼리가 다수 예상된다.
활동 내용
정량적인 성능 측정 방법과 병목을 해결할수있는 기술적 해결 방안을 찾고,
이를 실제로 적용해보며 개선된 성능을 수치화 해본다.
해결 방안 탐구
분석 방법 후보
설명: 현재 쿼리의 성능을 분석하여 병목 지점을 파악하는 것이 필요하다. 이 과정에서 쿼리 실행 시간을 모니터링하고, 성능 병목이 발생하는 원인을 찾아야 한다.
장점: 실시간으로 쿼리 성능을 모니터링하여 특정 쿼리가 병목이 되는 시점을 정확히 파악할 수 있다.
구현 방안:
해결 방안 후보
하나의 테이블에 Select Query가 병목되어 성능에 이슈가 예상되는 현 상황에서 해결방안을 탐구해 보았다.
설명: 빈번하게 조회되는 데이터는 캐싱을 통해 데이터베이스 쿼리를 줄일 수 있다. 캐시를 이용하면 자주 사용되는 데이터를 메모리에 저장하고, 데이터베이스로의 접근을 최소화할 수 있다.
장점: 쿼리 횟수를 크게 줄여 병목을 완화하고, 응답 시간을 단축할 수 있다.
구현 방안:
설명: Spring JPA의 쿼리 생성은 편리하지만, 복잡한 쿼리나 성능이 중요한 쿼리에서는 비효율적일 수 있다. 직접 SQL을 작성해 효율적인 쿼리를 구현하는 것이 도움이 될 수 있다.
장점: 더 세밀하게 쿼리를 최적화할 수 있으며, 복잡한 비즈니스 로직에 맞는 맞춤형 쿼리를 작성할 수 있다.
구현 방안:
@Query
를 통해 네이티브 SQL을 작성하여 특정 상황에 맞는 최적화된 쿼리를 작성한다.설명: SELECT 쿼리의 범위와 데이터양을 최소화하고, 불필요한 데이터를 요청하지 않도록 쿼리를 최적화하는 것이 중요하다.
장점: 데이터 양을 줄여 네트워크 트래픽을 감소시키고, 응답 속도를 향상시킨다.
구현 방안:
SELECT *
지양).설명: 데이터베이스에서 쿼리 성능을 높이기 위해 적절한 인덱스를 설정하는 것은 매우 중요한 최적화 방법이다.
장점: 특정 컬럼에 인덱스를 추가하면 조회 성능이 대폭 개선된다.
구현 방안:
설명: 데이터베이스를 수평적으로 분할하여 테이블의 데이터를 여러 서버에 나누어 저장하는 방법이다. 테이블 단위로 부하를 분산시킬 수 있다.
장점: 데이터가 분산되어 더 많은 요청을 효율적으로 처리할 수 있으며, 스케일링이 용이하다.
구현 방안:
설명: 읽기 성능을 개선하기 위해 Master-Slave 구조로 리플리케이션을 설정할 수 있다. Master에서는 쓰기 작업을 처리하고, Slave에서는 읽기 작업을 처리하도록 분산시킬 수 있다.
장점: 읽기 작업의 부하를 Slave 서버에 분산시켜 성능을 개선할 수 있다.
구현 방안:
@Primary
와@Qualifier
를 이용해 읽기/쓰기 구분을 한다.설명: 트랜잭션이 아닌 비동기 작업으로 쿼리할 수 있는 부분은 비동기적으로 처리하거나, 메시지 큐를 사용해 데이터 처리 작업을 분산시킬 수 있다.
장점: 웹 서비스의 응답 시간을 단축하고, 쿼리 부하를 줄일 수 있다.
구현 방안:
설명: 데이터를 실시간으로 처리할 필요가 없는 경우, 배치 작업으로 묶어 처리할 수 있다. 데이터를 한꺼번에 처리하여 성능을 최적화할 수 있다.
장점: 실시간 쿼리 부하를 줄이고, 대량 데이터를 효율적으로 처리할 수 있다.
구현 방안:
설명: 클라우드 데이터베이스 서비스를 사용하는 경우, 서버 리소스 증설 및 오토스케일링 옵션을 활용해 병목 현상을 해소할 수 있다.
실험
결론
Beta Was this translation helpful? Give feedback.
All reactions