최신 아키텍처와 도구 및 사례를 통해 규모에 맞게 MySQL을 실행하기 위한 검증된 전략을 제공한다!
어떻게 하면 MySQL의 성능을 극대화할 수 있을까? 『MySQL 성능 최적화』를 통해서 서비스 수준 목표 설정부터 스키마, 인덱스, 쿼리 설계뿐만 아니라, 플랫폼의 잠재력을 최대한 발휘할 수 있게 서버, 운영체제, 하드웨어 조정에 이르는 모든 고급 기술을 배울 수 있다. 또한 DBA가 알아야 하는 복제, 로드 밸런싱, 고가용성 및 장애 조치를 통해 애플리케이션을 확장하는 안전하고 실용적인 방법을 알려준다. 클라우드 및 자체 호스팅 MySQL, InnoDB 성능, 기능 및 도구의 개선 사항을 반영하여 업데이트된 이 개정판은 비즈니스에 따라 확장하는 관계형 데이터 플랫폼을 설계하는 데 도움이 된다. 그리고 데이터베이스 보안에 대한 모범 사례와 성능과 데이터베이스 안정성 향상에 대한 유익한 내용이 담겨 있다.
Contents
01장: MySQL 아키텍처
MySQL의 논리적 아키텍처
__연결 관리 및 보안
__최적화 및 실행
동시성 제어
__읽기/쓰기 잠금
__잠금 세분화
트랜잭션
__격리 수준
__교착
__트랜잭션 로깅
__MySQL에서의 트랜잭션
다중 버전 동시성 제어
복제
데이터 파일 구조
InnoDB 엔진
__JSON 문서 지원
__데이터 딕셔너리의 변화
__Atomic DDL
요약
02장: 신뢰성 엔지니어링 환경에서의 모니터링
신뢰성 엔지니어링이 DBA 팀에 미치는 영향
서비스 수준 목표의 정의
__고객 만족을 위해 필요한 것은 무엇일까요?
측정 대상
__SLI 및 SLO 정의
__모니터링 솔루션
__가용성 모니터링
__쿼리 지연 모니터링
__오류 모니터링
__사전 모니터링
장기적인 성능 측정
__비즈니스 케이던스 배우기
__효과적인 메트릭 추적
__성능 점검을 위한 모니터링 도구 사용
__전체 아키텍처링에 SLO 활용하기
요약
03장: 성능 스키마(Performance Schema)
성능 스키마 소개
__인스트루먼트 요소
__컨슈머 체계
__자원 소비
__제약 사항
__sys 스키마
__스레드 이해하기
설정
__성능 스키마의 활성화와 비활성화
__인스트루먼트 활성화와 비활성화
__컨슈머 활성화와 비활성화
__특정 객체에 대한 모니터링 튜닝
__스레드 모니터링 튜닝
__성능 스키마에 대한 메모리 크기 조정
__기본값
성능 스키마 사용
__SQL 문 점검
__읽기 대 쓰기 성능 점검
__메타데이터 잠금 점검
__메모리 사용량 점검
__변수 점검
__자주 발생하는 오류 점검
__성능 스키마 자체 점검
요약
04장: 운영 체제 및 하드웨어 최적화
MySQL의 성능을 제한하는 요소
MySQL용 CPU를 선택하는 방법
메모리 및 디스크 리소스의 균형 유지
__읽기, 쓰기, 캐싱
__작업 세트란?
솔리드 스테이트 스토리지
__플래시 메모리 개요
__가비지 컬렉션
RAID 성능 최적화
__RAID 장애, 복구 및 모니터링
__RAID 구성 및 캐싱
네트워크 설정
파일시스템 선택하기
__디스크 큐 스케줄러 선택
__메모리와 스와핑
__운영 시스템 상태
__그 외 유용한 도구들
요약
05장: 서버 설정 최적화
MySQL의 설정이 동작하는 방법
__구문, 범위 및 다이내믹 여부(Dynamism)
__지속(Persisted) 시스템 변수
__변수 설정의 부작용
__변수 변경 계획
__하지 말아야 할 것
__MySQL 설정 파일 생성
__MySQL 서버 상태 변수 점검
메모리 사용량 설정
__연결당 메모리 요구사항
__운영 체제를 위한 메모리 예약
__InnoDB 버퍼 풀
__스레드 캐시
MySQL의 I/O 동작 설정
__InnoDB 트랜잭션 로그
__로그 버퍼
__InnoDB 테이블스페이스
__다른 I/O 설정 옵션
MySQL 동시성 설정
안전 설정
고급 InnoDB 설정
요약
06장: 스키마 설계와 관리
최적의 데이터 유형 선택
__정수
__실수
__Date와 Time 유형
__비트 팩 데이터 유형
__JSON 데이터
__식별자 선택
__특별한 유형의 데이터
MySQL의 스키마 설계 문제
__너무 많은 열
__너무 많은 조인
__지나친 ENUM 사용
__위장한 ENUM
__NULL의 지나친 배제
스키마 관리
__데이터 저장소 플랫폼의 일부인 스키마 관리
요약
07장: 고성능을 위한 인덱싱
인덱싱 기본
__인덱스 유형
__인덱스의 이점
고성능을 위한 인덱싱 전략
__프리픽스(Prefix) 인덱스 및 인덱스 선택성
__다중 열 인덱스
__좋은 열 순서 선택하기
__클러스터형 인덱스
__커버링 인덱스
__인덱스 스캔을 사용한 정렬
__중복과 이중 인덱스
__사용하지 않는 인덱스
인덱스와 테이블 유지 관리
__테이블 손상 찾기 및 복구
__인덱스 통계 업데이트
__인덱스 및 데이터 단편화 줄이기
요약
08장: 쿼리 성능 최적화
쿼리가 느린 이유는 무엇일까요?
느린 쿼리 기본: 데이터 액세스 최적화
__데이터베이스에 불필요한 데이터를 요청하고 있습니까?
__MySQL이 너무 많은 데이터를 검사하고 있습니까?
쿼리를 재구성하는 방법
__복잡한 쿼리 대 많은 쿼리
__쿼리 자르기
__조인 분해
쿼리 실행 기본 사항
__MySQL 클라이언트/서버 프로토콜
__쿼리 상태
__쿼리 최적화 프로세스
__쿼리 실행 엔진
__클라이언트에게 결과 반환하기
MySQL 쿼리 옵티마이저의 한계
__UNION 제한 사항
__동등 전파(Equality Propagation)
__병렬 실행
__동일한 테이블에 대한 SELECT와 UPDATE
특정 유형의 쿼리 최적화
__COUNT() 쿼리 최적화
__조인 쿼리 최적화
__ROLLUP으로 GROUP BY 최적화
__LIMIT 및 OFFSET 최적화
__SQL_CALC_FOUND_ROWS 최적화
__UNION 최적화
요약
09장: 복제
복제 개요
__복제 작동 방식
복제의 내부 동작
__복제 형식 선택
__전역 트랜잭션 식별자
__복제 충돌의 대비
__지연 복제
__멀티 스레드 복제
__반동기 복제
__복제 필터
복제 페일오버
__계획된 승격
__계획되지 않은 승격
__승격의 트레이드 오프
복제 토폴로지
__액티브/패시브(Active/Passive)
__액티브/리드 풀
__권장하지 않는 토폴로지
복제 관리 및 유지 관리
__복제 모니터링
__복제 지연 측정
__레플리카와 소스의 일치 여부 확인
복제 문제와 해법
__소스의 바이너리 로그 손상
__고유하지 않은 서버 ID
__정의되지 않은 서버 ID
__임시 테이블 누락
__모든 업데이트를 복제하지 않음
__과도한 복제 지연
__소스의 오버사이즈 패킷
__디스크 공간 없음
__복제 제한 사항
요약
10장: 백업 및 복구
백업을 하는 이유
복구 요구 사항 정의
MySQL 백업 솔루션 설계
__온라인 백업 또는 오프라인 백업
__논리적 백업 또는 원시 백업
__백업 대상
__증분 백업 및 차등 백업
__복제
바이너리 로그 관리 및 백업
백업과 복구 도구
__MySQL 엔터프라이즈 백업
__Percona XtraBackup
__mydumper
__mysqldump
데이터 백업하기
__논리적 SQL 백업
__파일시스템 스냅숏
__Percona XtraBackup
백업에서 복구하기
__논리적 백업 복원
__스냅숏에서 원시 파일 복원
__Percona XtraBackup으로 복원하기
__원시 파일 복원 후 MySQL 시작하기
요약
11장: MySQL 스케일링
스케일링이란?
읽기 대 쓰기 바운드 워크로드
__워크로드의 이해
__읽기 바운드 워크로드
__쓰기 바운드 워크로드
기능적 샤딩
읽기 풀로 읽기 스케일링
__읽기 풀 구성 관리
__읽기 풀에 대한 상태 확인(Health checks)
__로드 밸런싱 알고리즘 선택
대기열
샤딩으로 쓰기 스케일링
__분할 방식 선택
__다중 파티셔닝 키
__샤드 간의 쿼리
__Vitess
__ProxySQL
요약
12장: 클라우드에서의 MySQL
관리형 MySQL
__MySQL용 Amazon Aurora
__GCP Cloud SQL
가상 머신의 MySQL
__클라우드의 머신 유형
__올바른 머신 유형 선택
__올바른 디스크 유형 선택
__추가적인 팁
요약
13장: MySQL 규정 준수
규정 준수란?
__서비스 조직 제어 유형 2(SOC 2)
__사베인스-옥슬리 법(SOX)
__결제 카드 산업 데이터 보안 표준(PCI DSS)
__건강 보험 이전 및 책임에 관한 법률(HIPAA)
__연방정부 위험 및 인증 관리 프로그램(FedRAMP)
__개인 정보 보호 규정(GDPR)
__슈렘스 II(Schrems II)
규정 준수 제어를 위한 구축
__시크릿 관리
__역할과 데이터의 분리
__변경 사항 추적
__백업 및 복원 절차
요약
부록A: MySQL 업그레이드하기
업그레이드를 해야 하는 이유
라이프 사이클 업그레이드
업그레이드 테스트
__개발 환경 테스트
__실 운영 미러링
__레플리카
__도구 사용
대규모 업그레이드
요약
부록B: Kubernetes의 MySQL
Kubernetes를 통한 자원 프로비저닝
__신중한 목표 범위 지정
__컨트롤 플레인 선택
__세부 사항
요약
Author
실비아 보트로스,제레미 틴리,류수미,송희정
실비아 보트로스는 Twilio의 소프트웨어 설계자이다. SendGrid에서 근무하는 동안 수십억 개의 이메일 전송을 지원하는 데이터베이스 플랫폼을 구축하고, 제품 지원 및 데이터 저장소 설계를 초기부터 운영까지 추진하는 데 기여했다.
실비아 보트로스는 Twilio의 소프트웨어 설계자이다. SendGrid에서 근무하는 동안 수십억 개의 이메일 전송을 지원하는 데이터베이스 플랫폼을 구축하고, 제품 지원 및 데이터 저장소 설계를 초기부터 운영까지 추진하는 데 기여했다.