언어 선택
durumis AI가 요약한 글
- 논리적 데이터 모델링을 기반으로 물리적 데이터 모델링을 진행하며, 저장 공간 효율성, 오브젝트 파티셔닝 설계, 인덱스 설계 등을 통해 성능 최적화를 목표로 합니다.
- 특히 슬로우 쿼리를 분석하고 해결하는 것은 중요하며, 인덱스 사용, 캐싱, 역정규화 등 다양한 방법을 통해 성능 향상을 도모합니다.
- 역정규화는 정규화된 테이블의 성능 저하 문제를 해결하기 위한 방법이며, 테이블 구조 변경을 통해 읽기 성능을 향상시킬 수 있지만, 신중한 검토와 적용이 필요합니다.
논리적 데이터 모델링이 관계형 데이터베이스에 맞는 이상적인 테이블을 만드는 작업이었다면, 물리적 데이터 모델링에서는 이상적인 테이블을 실제 사용할 테이블로 만드는 작업을 포함하여 저장공간의 효율적 사용 계획, 오브젝트 파티셔닝 설계, 최적의 인덱스 설계등 성능 향상과 최적화를 중점적으로 고려한다.
서비스 운영시 병목 현상을 일으키는 슬로우 쿼리를 찾는 방법은 DBMS의 종류마다 다르며 슬로우 쿼리를 키워드로 검색하여 찾아야한다.
성능을 위해 고려해볼 사항들
슬로우 쿼리(Slow Query) 찾기
- 슬로우 쿼리는 DBMS가 요청 받은 쿼리를 수행할 때 일정 시간동안 수행되지 못한 쿼리를 말한다.
- 병목 현상을 일으키는 슬로우 쿼리를 찾아서 문제가 무엇인지 파악하고 해결한다.
인덱스(Index)
- 인덱스는 행에 대해 읽기 성능을 비약적으로 향상 시킨다.
- 그러나 쓰기 성능을 저하 시키고 저장 공간을 더 많이 사용한다.
캐시(Cache)
- 어플리케이션 레벨에서 데이터베이스의 부하를 줄일 수 있는 방법
- 동일한 입력의 요청 응답을 저장 공간에 저장해두었다가 응답 하는 방식이다.
위의 방법으로도 성능 문제가 해결이 되지 않으면, 역정규화 또는 반정규화라고 불리는 작업을 진행한다.
테이블의 구조를 수술해서 고치는 것이다.
정규화의 트레이드오프
정규화는 쓰기 작업의 편리함을 위해서 읽기의 성능을 포기하는 것과 같다. 정규화를 하게 되면 여러개로 쪼개진 테이블의 데이터들을 조인하는 쿼리를 작성 해야한다.
하지만 정규화가 반드시 성능을 떨어트리진 않으므로 역정규화를 진행하기 전에 꼭 문제를 올바르게 파악하고 검토 해야한다.
아래의 링크는 앞으로 다룰 역정규화에 대해서 다루고 있는 좋은 글이다.
역정규화, 반정규화 (denormalization)
먼저 알아두어야 할 것은, 정규화를 진행하고 난 뒤에 역정규화를 진행 해야 한다는 점이다. 처음부터 비정규화 테이블이 좋은 것은 아니다.
일단 지금 당장 필요한 지식은 아니기 때문에, 알아두고만 넘어가려고 한다.
테이블 역정규화 기법
출처 - DataOnAir - 반정규화와 성능
컬럼의 역정규화
출처 DataOnAir - 반정규화와 성능
관계의 역정규화
출처 - DataOnAir - 반정규화와 성능