Last Updated on 12월 23, 2023 by Jade(정현호)
MySQL 성능 최적화
고성능 시스템 구축을 위한 전략과 최적화 기법
서적 정보
원제 : High Performance MySQL, 4th Edition
출판사 : 위키북스
저자명 : 실비아 보트로스, 제레미 틴리
역자명 : 류수미, 송희정
출간일 : 2022년 09월 22일
ISBN13 : 9791158393656
ISBN10 : 1158393652
안녕하세요
이번에 리뷰해볼 책은 "MySQL 성능 최적화(고성능 시스템 구축을 위한 전략과 최적화 기법)" 입니다.
O'Reilly의 High Performance MySQL, 4th Edition 원서의 번역본 입니다.
이 책은 MySQL 운영에 대한 전문성과 성능 극대화 기술을 키우고자 하는 데이터베이스 엔지니어(관리자)와 데이터베이스 사용자인 개발자를 대상으로 합니다.
책은 관계형 데이터베이스 관리 시스템(RDBMS) 및 MySQL에 대해서 기본적인 지식 및 정보를 숙지하고 있다고 가정하며, 일반적인 OS(시스템) 관리, 네트워크 등의 약간의 지식과 경험이 있다고 가정합니다.
즉, 데이터베이스 및 MySQL에 대한 기본 이후에 데이터베이스 및 MySQL의 성능 최적화를 위한 최신의 도구, 사례, 검증된 전략을 제공하고 있습니다.
MySQL 성능 최적화 은 High Performance MySQL 4판의 번역서로 2004년, 2008년, 2012년 이후에 나온 새로운 버전 4판 입니다.
이전 버전에서는 개발자와 관리자(DBA)에게 심층적인 내부 설계에 초점을 맞춰 다양한 튜닝 설정을 설명하였고, 설정을 효과적으로 변경하는 데 필요한 지식을 제공하여 성능에 문제가 되었을 때 최적화하는 방법을 가르치는 것이 목표였습니다.
4판의 목표도 동일하지만 초점이 다릅니다.
사람들에게 MySQL을 가장 잘 사용하는 방법에 대해 제대로 된 의사결정을 내리기 위해 필요한 정보를 제공하는데 중점을 두며 MySQL이 어떻게 설계되었는지 이해하는 것으로 시작하여 MySQL이 무엇을 잘 처리할 수 있는지 잘 하지 못하는 것이 무엇인지를 이해하는 데 도움이 됩니다.
이 책은 최신의 서비스와 현대 기업들의 규모에 맞게 MySQL을 운영하는데 포괄적인 가이드를 제공하고 있습니다.
이 책은 총 13장 384페이지로 구성되어 있으며, 성능 개선을 위해 예를 들어 쿼리(SQL) 튜닝과 같은 특정 부분만 다루는 것이 아닌 성능 개선과 최적화 목표를 달성하기 위해 다양한 내용을 다루고 있습니다.
13장으로 구성된 만큼 다양한 내용을 다루고 있고, 책을 읽은 후 느꼈던 주요 사항에 대해서 간략하게 정리해보도록 하겠습니다.
1장 MySQL 아키텍처
MySQL은 그 아키텍처 특성과 오픈소스의 장점으로 인해 광범위한 목적으로 다양하고 많은 곳에서 사용되고 있습니다.
개인 웹 사이트(블로그 등)에서 부터 대규모 엔터프라이즈 애플리케이션에 이르기까지 크고 작은 환경에서 어디에서도 잘 작동할 만큼 유연합니다. 이러한 MySQL을 최대한 잘 활용하기 위해서는 MySQL의 아키텍처와 설계를 이해해야 합니다.
1장에서는 이러한 내용에 근간하여 MySQL 서버 아키텍처를 살펴보고 스토리지 엔진 간의 주요 차이점과 차이점이 중요한 이유 등을 설명하고 있습니다.
여러 데이터베이스에서 공통적으로 중요하게 다루는 동시성 제어와 트랜잭션에 대해서도 자세하게 다루고 있습니다.
격리 수준(Isolation Level), MySQL에서의 트랜잭션, 다중 버전 동시성 제어(MVCC) 등을 설명하고 있어서 이 책에서 꼭 읽어봐야 할 부분이라고 생각 합니다.
3장 성능 스키마(Performance Schema)
데이터베이스 성능 개선(최적화)를 위해 변경 시 변경사항이 어떠한 영향을 미치는지, 어느 시점에 느린 성능을 보이는 쿼리의 정보, 잠금에 의해 애플리케이션의 성능 저하, 변경 작업 시 완료되는데까지 예상되는 시간 과 같은 MySQL 사용하면서 궁금할 수 있는 다양한 질문에 답하는데 필요한 데이터가 저장된 데이터베이스가 MySQL의 성능 스키마(Performance Schema) 입니다.
3장에서는 계속적으로 성능 정보가 추가되고 있는 성능 스키마(Performance Schema)에 대해서 설명하고 있습니다.
MySQL의 성능 스키마(Performance Schema)는 MySQL의 다양한 성능적인 데이터를 수집 및 저장하고 있습니다.
다양한 테이블이 존재하는 만큼 다양한 데이터를 수집 저장하고 있으며, 테이블내에서 다양한 성능적 지표가 수집 저장되어 있습니다.
성능 스키마(Performance Schema)에 대한 정보는 아직까지는 예를 들어 Oracle Waits Interface(OWI)와 같은 유형으로 자세한 설명과 내용이 정리된 정보가 다소 부족한 부분이 있습니다.
성능에 대한 원천(RAW) 데이터가 많이 있는 만큼 테이블에 대한 이해 그리고 그 안의 지표에 대해서 이해가 있어야 잘 활용할 수 있습니다.
아직까지는 성능 스키마(Performance Schema)에 대해서는 쉽게 그리고 자세하게 내용을 다루는 책이나 공개된 정보가 다소 부족한 현실에서 이 책에서 다루는 성능 스키마(Performance Schema)에 대한 내용은 꽤 자세하고 많은 내용을 다루고 있다고 생각 합니다.
더 잘 사용하기 위해서는 이 책에서 다루고 있는 내용이외에 더 찾아보고 학습해야 할 부분도 있겠지만, 책에서 다루는 내용으로도 충분히 성능 스키마(Performance Schema)의 기본 개념 과 전반적인 내용을 이해하는데 부족함은 없을 거라고 생각하고 있습니다.
그래서 이 책 "MySQL 성능 최적화"의 여러 내용 중에서 저에게 있어서 가장 필요한 정보이고 다른 책에서는 다루지 않거나 찾아보기 힘든 내용이라서 가장 좋았던 내용이었습니다.
책에서 꼭 읽어보고 여러 번 읽어볼 좋은 챕터 라고 생각합니다.
5장 서버 설정 최적화
이번 장에서는 MySQL 서버에 적합한 설정파일(my.cnf) 작성에 대한 내용을 설명하고 있습니다.
MySQL 시스템 변수에 대해서 설명하고 관련된 MySQL 내부구조와 동작을 설명하고 있습니다.
모든 시스템 변수를 소개하거나 설명하는 것은 아니지만 MySQL IO 동작설명, InnoDB 로그 버퍼, InnoDB 테이블 스페이스, 메모리 사용량 설정 등과 같은 여러 내용을 설명하고 그와 연관된 시스템 변수에 대해서 설명하고 있습니다.
6장 스키마 설계와 관리
성능 개선 및 최적화를 위해서는 논리적, 물리적으로 우수한 설계가 기반이 되어야 하며 그러므로 쿼리가 실행되는 스키마에 대해서 좋은 설계가 필요합니다.
일반적인 데이터베이스 논리 설계보다는 MySQL 데이터베이스 설계에 관한 장으로 이어서 7장 인덱싱에 초점을 맞추어서 설명하며 이어서 8장에서는 쿼리 성능 최적화의 대한 내용으로 6, 7, 8장이 유기적으로 상호연관 된 내용으로 이어지게 됩니다.
6장에서는 스키마 설계와 관리를 위한 MySQL 테이블 설계의 고려할 점과 변경 관리에 대한 내용 그리고 데이터 타입에 대한 설명이 주를 이루고 있습니다.
MySQL 데이터 타입 각각에 대해서 자세하게 설명 및 사용시 유의할 점(단점)등을 설명하고 있어서 이 부분도 꼭 한 번은 읽어보는 것이 좋다고 생각 합니다.
7장 고성능을 위한 인덱싱
인덱스는 MySQL을 비롯하여 다양한 데이터 저장소에서 사용되며, MySQL에서는 스토리지 엔진에서 원하는 행을 빠르게 찾기 위해 사용하는 데이터 구조로 매우 중요하고 항상 사용되는 데이터 구조 및 기능입니다.
7장에서는 MySQL의 설계의 한 부분으로 이러한 MySQL 인덱스에 대한 기본 이론 정보와 종류, 내용 설명을 하며, 인덱스 생성 전략 및 효율적인 인덱스 사용에 대한 내용을 설명하고 있습니다.
인덱스 관련 기본 이론인 B-트리 인덱스 및 클러스터형 인덱스를 설명하고 있으며, 프리픽스(Prefix)인덱스, 다중 컬럼 인덱스에서의 컬럼 순서 전략, 커버링 인덱스, 인덱스 스캔을 사용한 정렬 등과 같은 고성능을 위한 인덱스 사용에 대한 전반적인 내용을 설명하고 있습니다.
8장 쿼리 성능 최적화
6장, 7장, 8장 유기적이면서 상호 연관된 내용의 마지막 장으로 쿼리 수행 시 성능 저하에 대한 내용과 그에 따른 최적화에 대한 내용을 설명하고 있습니다.
쿼리의 실행 계획에 대한 내용 설명을 포함하여, 쿼리가 수행되는 기본 이론 정보, 쿼리를 재구성하는 방법, 테이블 조인, 인덱스 사용, 정렬 최적화, 특정 유형의 쿼리 최적화 등과 같은 여러 내용을 담고 있습니다.
SQL 튜닝보다 더 넓은 관점으로 쿼리를 수행의 최적화라는 목표에 도달하기 위해서 다양한 내용을 설명합니다.
11장 MySQL 스케일링
빠르게 성장하는 비지니스 환경에서 트래픽은 해마다 크게 증가하고 있으며, 환경도 더욱더 복잡해지고 있습니다.
그에 따른 빠른 데이터 처리에 대한 요구 사항 및 필요가 빠르게 증가하고 있습니다.
MySQL의 확장에서 다루고 저장하는 데이터의 특성 때문에 다른 유형의 서버나 프로그램과는 매우 다르며, 그에 따른 일반적으로 로드밸런서를 앞에 추가하거나 로드밸런서 뒤에 MySQL을 추가하기만 하는 되는 다른 유형의 서버나 애플리케이션과는 확연히 다르다고 할 수 있습니다.
11장에서는 이와 관련된 내용으로 MySQL의 확장에 관련된 내용을 설명하고 다루고 있습니다.
스케일링에 대한 이해 및 워크로드의 이해와 같은 이론적인 내용을 포함하여 수평적 확장을 위한 샤딩에 대한 내용을 많이 다루고 설명하고 있습니다.
수평적 확장을 위한 도구도 설명을 하고 있으며 HAProxy, ProxySQL, Vitess 을 소개 및 설명하고 있습니다.
특히 다른 책에서 많이 다루지 않은 샤딩에 대한 전반적인 내용을 많이 다루고 있고, 최근 많이 사용되는 ProxySQL과 Vitess에 대한 내용을 설명하고 있어서 이 부분도 좋았던 내용이라고 생각 하고 있습니다.
O'Reilly의 High Performance MySQL 4판(MySQL 성능 최적화)은 아주 오래전부터 성능 개선 및 최적화를 목표로 기술된 서적으로 특정한 부분의 개선점을 다루지 않고 다양한 관점과 여러 내용을 전반적으로 설명하고 있는 책이라고 생각 합니다.
전반적으로 다양한 내용을 설명하다 보니 읽는 독자의 기술 습득량에 따라서 이미 알고 있는 부분이 다뤄지는 부분도 있을수 있겠지만 다시 한번 상기시키고 정리하는 계기가 될 수도 있을 것 같으며, 어느정도 깊이 있게 내용을 설명하고 있기 때문에 천천히 자세히 그리고 여러 번 읽어서 지식의 내재화가 필요한 부분도 있다고 생각 하고 있습니다.
이번 MySQL 성능 최적화 책을 통해 특히 Performance Schema를 전반적으로 정리해볼 수 있는 좋은 시간이었고 스키마 설계 관련하여 테이블 구조 고려 및 데이터 타입에 대한 선택 고려와 같은 내용도 다시 한번 더 내용을 정리하고 숙지할 수 있는 시간이었습니다.
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