MySQl은 8.4.x버전을 사용할 것임. 이전 강의들에서는 8.0.x를 사용했는데 이번 강의에서는 8.4.x를 사용할 것을 강조하신다. 강조하는만큼 db서버 버전을 올리자.

https://dev.mysql.com/downloads/mysql/

비밀번호는 test1234로 설정함.

그리고 이번 강의에서는 수백만건의 데이터를 세팅해 실무와 유사한 상황을 재현할 것이다. 쿼리가 실제로 지연되는것을 체험해보자.

실습 데이터 분석

이런 데이터들을 사용할 것. 여기서 중요한건 사실 데이터를 많이 넣는다고 해서 실무에서 겪는 성능 문제를 재현하기는 어렵다. 실무에서는 특정 값에 데이터가 편중되거나, 최근 데이터가 집중되는 불균일한 분포가 성능 이슈의 핵심 원인이 되기 때문. 예를들자면

  1. 쇼핑몰에서는 소수의 인기 상품이 트래픽을 독점하는건 굉장히 자주 있는 일임. 그럼 당연히 리뷰도 그 인기상품에 몰린다. 이럴때 같은 인덱스를 타도 성능이 수백배 차이가 날 수 있다.
  2. 최근에 나온 상품에 요청이 몰릴 수 있다. 같은 기간 범위 쿼리라도 조회 구간에 따라 처리해야할 데이터 양이 크게 달라질 수 있다.
  3. 등급별 회원 수 차이가 조인 성능을 좌우하기도 한다. 예를들어 VIP 회원들이 인당 주문건수는 가장 많지만, 전체 주문건수가 가장 많은 등급은 BRONZE일 수 있음.
  4. MySQL 옵티마이저는 기본적으로 데이터가 균일하게 분포한다고 가정하고 실행 계획을 세운다. 하지만 앞서 본 예시처럼 현실의 데이터는 편중되어있다.

이 실습환경을 위해서는 디스크에 최소 10GB정도가 비어있어야 한다.

실습 데이터 생성