회사에서 로그 시스템을 담당하고 있습니다.
업무 중 LogDB 성능 최적화 및 알맞은 스토리지 엔진 선택에 대한 필요성을 느꼈습니다.
관련된 도서를 찾던 중 목적에 맞는 책을 발견하여 독서 후 해결방안을 공유하고자 합니다.


MySQL로 서비스를 운영, 설계, 튜닝하면서 적용한 사례를 바탕으로 MySQL의 장점과 성능 최적화 방법을 설명합니다.
대용량 데이터 수집/처리하기 위한 방법, 원론적인 데이터베이스 분석이나 설명은 하지 않지만 필자의 개인적인 경험에 의한 내용을 주로 다룹니다.

목차의 핵심 요약 정리 내용입니다.

1장. MySQL 특징

서버 엔진 (SQL Interface, Parser, OTIMIZER, Cache&Buffer)

  • 사용자가 SQL 쿼리를 DB 날렸을 , 쿼리파싱과 디스크나 메모리 같은 물리적인 저장장치와 통신하는 스토리지엔진에 데이터 요청 업무를 담당합니다.
  • 스토리지 엔진에서 받아온 데이터를 사용자 요청에 맞게 처리하거나 접근 제어, 쿼리 캐시, 옵티마이저 등의 역할을 수행합니다.
  • Table Join, Group By, Order By와 같은 일반적인 SQL부터 Function/Procedure, Trigger, Constraint 등과 같은 기능을 수행합니다..

스토리 엔진 

  • 물리적인 저장장치에서 데이터를 읽어오는 역할을 담당합니다. (Spring의 DAO 클래스와 유사)
  • 다른 DBMS와 다르게 스토리지 엔진이 플러그인 방식으로 동작한다. 덕분에 여러 개의 스토리지 엔진을 설치하여 사용 가능하다. (InnoDB, MyISAM , MRG_MYISAM, BLACKHOLE, CSV, MEMORY, FEDERATED, ARCHIVE)
  • MYSQL은 다른 사용 DBMS와는 다르게 DB엔진에 완벽하게 최적화되어 있지 않다. 그 이유는 다양한 스토리지 엔진에서 동작할 수 있어야 하기 때문이다. 즉 데이터 일부 처리에 대해서 비효율적일 수도 있지만 확장성 면에서는 다른 어떤 DBMS보다 유연하다.  최근 Google Compute Engine에서 MySQL을 적극적으로 도입하고 있다.

주요 스토리지 엔진의 특징

  • MyISAM 스토리지 엔진
    • 파일기반 스토리지 엔진이며 데이터데 대한 키, 즉 인덱스만 메모리에 올려서 처리합니다.
    • 데이터는 메모리에 적재하지 않고 디스크에 바로 접근합니다. 
    • 트랜잭션을 지원하지 않고 테이블 단위 잠금 (Table Level Lock)으로 데이터 변경을 처리합니다.
      따라서 특정 테이블의 여러 세션에서 데이터를 변경하면 성능이 저하됩니다. (가용성이 떨어짐)
    • 텍스트 전문을 검색할 수 있는 풀텍스트 인덱싱(Fulltext Indexing)과 지리벙보를 처리 할 수있는 
      지오메트릭 스파셜 인덱싱(Geometric Spatial Indexing) 같은 좋은 기능도 있습니다.
      반면 위 기능들과 파티셔닝 기능을 같이 사용 할 수 없습니다.
    • MyISAM엔진은 애초에 저사양 서버에서 구동하기 위해 고안된 스토리지 엔진이기 때문에 다양한 기법으로 데이터 사이즈를 줄입니다. 그중 하나가 프리픽스(Prefix) 인덱스 압축 기법 으로 키 사이즈를 최소하 합니다.

+ Recent posts