융무의 기술블로그
article thumbnail

서비스 운영 중 추천 시스템 배치에서 DB lock 운영 문제가 발생되었던 적이 있었습니다. 추천 결과를 DB temp table로 export 하는 과정에서 Lost connection to MySQL server during query 에러가 발생하였고 방어 로직으로 재시도하였지만 lock wait timeout exceeded에러가 발생해서 배치 실패 경험이 있었습니다. 물론 spark와 airflow를 튜닝하면서 그 당시에는 쿼리 수정 및 에러 로그와 원론적인 부분만 팠었지만 현재 다른 서비스를 운영하면서 presto와 hive 엔진을 사용하며 sql 성능 최적화 및 튜닝 포인트에 관심이 가기 시작했습니다. MySQL에 대해서 디테일하게 배우고자 책을 선택하게 되었던 거 같습니다.


- 이 책은 1권과 2권으로 나누어 지며 1권에서는 MySQL 설치와 서버 아키텍처, 트랜잭션과 잠금, 인덱스 종류의 구조 및 활용, GTID 기반 복제 및 InnoDB 클러스터 아키텍처, 쿼리의 실행 계획 분석 및 최적화에 관한 내용을 다루고 있습니다.
- MySQL 엔진과 MySQL 서버에서 기본으로 제공되는 InnoDB 스토리지 엔진, MyISAM 스토리지 엔진을 구분해서 아키텍처를 살펴보았고 MySQL의 동시성에 영향을 미치는 잠금과 트랜잭션, 트랜잭션의 격리 수준(Isolation level)에 대해 배우며 MySQL 서버에서 사용 가능한 압축 방식은 테이블 압축과 페이지 압축에 관해 구분해서 살펴보았습니다. 또한 MySQL에서 사용 가능한 인덱스의 종류 및 특성에 대해서 세세하게 다뤄볼 수 있었고 MySQL 서버가 사용자의 요청을 처리하기 위해 데이터를 가공하는 기본 절차와 빠른 성능을 보장하기 위해 수행하는 최적화에 대해 옵티마이저와 힌트를 자세하게 살펴보았습니다. 마지막으로 실행 계획을 읽는 순서와 실행 계획에 출력되는 키워드, 알고리즘에 대해 자세하게 배울 수 있었습니다.
- 이 책은 개발자와 DBA를 위한 MySQL 실전 가이드로 소개하고 있으며 단순히 SQL의 사용이나 튜닝이 아니라 MySQL 서버와 엔진에 대해서 디테일하게 다루고 있어서 난이도가 조금 있었던거 같습니다. 평소에 자주 사용하던 SQL이 관점에 따라서 그리고 다양한 방식으로 최적화를 할 수 있다는 점에서 아직 배울게 많다고 느꼈습니다.

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!