Last Updated on 10월 31, 2023 by Jade(정현호)
MYSQL을 더 빠르게, 성능 최적화 선택과 집중
쿼리 응답 시간을 줄이는 가장 최적의 방법과 기술들
서적 정보
원제 : Efficient MySQL Performance
한글 번역 제목 : MYSQL을 더 빠르게, 성능 최적화 선택과 집중
출판사 : 프리렉
저자명 : 대니얼 니히터
역자명 : 이정해
출간일 : 2023년 10월 25일
ISBN13 : 9788965403722
ISBN10 : 8965403723
출판 프리렉 , 발행 2023.10.25
데이터베이스 성능 최적화 분야에서
가장 뛰어난 저자의 모범 사례와 기술 노하우 수록
안녕하세요
이번에 리뷰해볼 책은 번역서인 "MYSQL을 더 빠르게, 성능 최적화 선택과 집중" 입니다.
MySQL 성능 관련 책인 "Efficient MySQL Performance" 번역서입니다.
같은 MySQL 스터디원인 이정해님께서 번역하신 책으로 감사하게도 저와 다른 스터디원분에게 베타리딩을 부탁해 주셔서 출간전에 베타리딩을 진행한 책입니다.
원서인 "Efficient MySQL Performance"은 2021년 12월 21일에 출간되었고 책이 나왔을 때 부터 매우 좋다는 평이 많았던 MySQL 성능 관련된 내용의 책입니다.
이번에 같은 MySQL 스터디원인 이정해님이 바쁘신 와중에서도 번역을 해 주셔서 조금 더 편하게 좋은 책을 볼 수 있는 기회를 만들어 주셔서 다시 한번 수고와 감사의 말씀을 전합니다.
이 책은 다음과 같은 장(챕터)으로 구성으로 되어있습니다.
- 쿼리 응답 시간
- 인덱스와 인덱싱
- 데이터
- 접근 패턴
- 샤딩
- 서버 메트릭
- 복제 지연
- 트랜잭션
- 다른 문제들
- 클라우드 MySQL
총 10장 380페이지이며, 성능 관련하여 어느 하나 편중되지 않고 넓으면서도 깊게 다양한 내용을 두루두루 다루고 있어서 스포츠의 올 라운드(All-rounder)로 비유해 볼 수도 있을 것 같습니다.
간략하게 각 장마다 다루는 내용에 대해서 리뷰를 해보도록 하겠습니다.
1장 쿼리 응답 시간
성능은 곧 쿼리 응답 시간입니다
이 책의 시작을 알리는 말이며, 어떻게 보면 이 책에서 이야기하고자 하는 가장 원론적이면서 최종적인 목표이자 핵심의 내용이라고 할 수 있습니다.
1장은 제목과 같이 쿼리 응답 시간에 대한 정의에 대한 내용으로 시작하여 응답시간을 측정하는 과정 과 방법을 설명하고 쿼리 응답 시간 개선을 위한 쿼리 최적화 그리고 최적화에 대한 일반적인 방법 등의 내용을 다루고 있습니다.
1장에서 원론적이면서 최종 목표인 쿼리 응답 시간에 대한 전반적인 내용과 개선 방향성을 배울 수 있습니다.
2장 인덱스와 인덱싱
MySQL의 성능은 여러 요소 요인으로 결정되지만 쿼리가 실행됨에 있어서 가장 기본이 되는 인덱스가 없다면 성능을 얻을 수 없을 것입니다.
그래서 2장에서는 인덱스에 대한 내용을 다루고 있으며, MySQL에서 인덱스가 어떤것이고 어떻게 작동하는지를 시각적으로 소개하며, MySQL에서 좋은 성능을 위해서 어떻게 인덱스를 생성해야 하는지에 대한 내용, 인덱스의 효율성이 저하되는 일반적인 내용 등을 다루고 있습니다.
그리고 테이블 조인 알고리즘과 테이블 조인에 알맞은 인덱스에 대한 내용도 설명하고 있습니다.
3장 데이터
3장에서는 쿼리 응답 시간 개선을 위한 여러 가지 방법 중에서 간접 쿼리 최적화 부분을 다루고 있습니다.
MySQL 성능의 중요 세 가지 비밀을 말하고 있으며, 최소 데이터의 원칙을 소개하고, 그에 따른 데이터를 안전하게 삭제하거나 보관하는 방법 등으로 데이터에 관련된 주제로 다양한 내용을 다루고 있습니다.
4장 접근 패턴
4장에서는 애플리케이션이 MySQL을 사용하여 데이터에 접근하는 여러 가지 방법에 대한 내용을 설명하고 있습니다.
데이터베이스 성능이 계속적으로 선형으로 확장되기는 어려움과 성능이 불안정해지는 한계점에 대해서 설명하고 있으며, 어떤 애플리케이션은 빠르게 처리되는 반면에 어떤 애플리케이션이 느린 이유와 같은 사례를 통해 설명합니다.
이와 같이 애플리케이션이 데이터베이스를 사용에 관한 여러 가지 내용을 다룹니다.
5장 샤딩
MySQL 단일 인스턴스로 애플리케이션의 트랜잭션을 모두 소화하기란 현실적으로 어려우며 성능적 한계점에 도달할 수 있습니다.
이런 문제를 해결하기 위해서 다양한 방법이 있을 수 있으며, 그 중에서 확장 기능의 주요 요소인 샤딩에 대해서 기본 매커니즘을 소개하고 있습니다.
단일 데이터베이스에서 샤딩이 필요한 이유, 관계형 데이터베이스에서 복잡한 샤딩의 내용, 그리고 샤딩의 대안에 대한 내용이 설명되어 있습니다.
6장 서버 메트릭
MySQL 메트릭은 성능과 밀접한 관계가 있습니다. 메트릭의 목적은 현재 시스템이 어떻게 작동하는지를 측정하고 모니터링하는 것입니다.
6장에서 이와 관련하여 워크로드가 MySQL 서버 성능과 어떻게 상호작용하며, 영향을 미치는 방식을 설명하고 있고 서버의 상태를 확인하는데 필수인 MySQL 메트릭의 스펙트라를 분석하는 내용을 다루고 있습니다.
MySQL 메트릭의 스펙트라를 확인하며 이 부분은 MySQL 내부 작업을 둘러보는 깊이있는 내용을 다루고 있습니다.
7장 복제 지연
MySQL에서의 여러 핵심 기능 중에서 복제 기능이 있습니다. MySQL의 복제 기능은 오래된 기능인 만큼 매우 안정적이고 유연하고 다양한 기능을 제공하고 있습니다.
다만 복제에는 필연적으로 두 가지의 문제가 나타날 수 있습니다.
- 복제 지연
- 복제 에러
이번 7장에서는 복제에 대한 기본 용어를 소개하고 복제 지연이 발생되는 기술적인, 주요 원인을 설명하고 복제 지연에 따른 데이터 손실을 설명합니다. 그리고 복제 지연을 줄이기 위한 방법과 높은 정확도의 복제 지연 방법을 제시합니다.
8장 트랜잭션
MySQL을 비롯하여 RDBMS에서 핵심 기능은 트랜잭션일 것입니다.
MySQL에는 MyISAM과 같은 비트랜잭션 스토리지 엔진이 있지만, 정교한 트랜잭션 기능을 지원하는 InnoDB 스토리지 엔진이 있으며 기본 스토리지 엔진으로 사용하고 있습니다.
8장에서는 트랜잭션 격리 수준과 관련된 행 잠금을 설명하고 ACID 속성 그리고 MVCC, 언두 로그에 대해서 다루고 있습니다.
그 외 트랜잭션과 관련된 변경 내용 목록 길이(HLL) 과 같은 내용을 포함하여 트랜잭션과 관련된 다양한 내용에서 설명합니다.
9장 다른 문제들
9장에서는 일반적으로 발생되는 MySQL의 문제와 이를 안화할 수 있는 방법에 대해서 소개하고 있습니다.
총 8개의 섹션으로 해서 소개되는 내용의 대부분은 성능과 직접적인 관련이 없지만 MySQL의 문제 요소이며, 이런 부분으로 내용을 설명하고 있습니다.
10장 클라우드에서 MySQL
이제는 MySQL을 사용하는 환경이 클라우드 라는 것이 어색하지 않을 정도로 최근에 MySQL의 사용 환경에서 클라우드의 비중이 많이 늘어났으며, 계속적으로 클라우드의 비중이 증가되는 추세입니다.
이번 10장에서는 이런 부분으로 해서 클라우드에서 MySQL을 사용하는 과정에서 모범 사례와 알아야 할 사항을 강조합니다.
클라우드에서 다양한 수준 과 방법의 MySQL관리에 대한 논의, 네트워크 지연과 스토리지 IO의 관계 그리고 성능과 비용에 관한 문제 등을 설명합니다.
책의 차례와 위의 간단한 리뷰을 통해 예상할 수 있는 것처럼 "MYSQL을 더 빠르게, 성능 최적화 선택과 집중" 책은 쿼리에 대한 실행계획이나 서버의 파라미터 튜닝이나, 성능지표 등과 같은 특정 분야나 기술을 넘어서 저자의 17년 넘는 MySQL 경험에서 나오는 다양한 성능 개선을 위한 방법과 노하우와 사례를 설명하고 있다고 할 수 있습니다.
성능과 관련하여 이처럼 다양한 관점으로 바라볼 필요가 있다고 느끼게 된 계기였고 여러 부분을 점검하고 고민이 필요함을 다시 한번 더 느낄 수 있었던 시간이었습니다.
성능 개선을 위해서 정말 여러 다양한 내용을 다루고 있기 때문에 한번은 꼭 읽어 볼만한 좋은 책이라고 생각하며 이번 리뷰는 마무리하겠습니다.
해당 리뷰는 베타리뷰 진행 과정에서 책으로 읽고 난 소감을 주관적으로 작성하였습니다.
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io