woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

풀 테이블 스캔과 리드 어헤드 #22

Open jurlring opened 2 years ago

jurlring commented 2 years ago

주제

풀 테이블 스캔의 조건과 문제점, 문제점의 보완 방안인 리드 어헤드

선정 이유

MySQL 옵티마이저가 어떤 경우에 인덱싱이 되어있는 컬럼이여도 풀 테이블 스캔을 하고, 풀 테이블 스캔의 문제점에 대한 보완 방안인 리드 어헤드를 알아보기

해당 텍스트

풀 테이블 스캔

풀 테이블 스캔 : 테이블을 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업

MySQL 옵티마이저가 주로 풀 테이블 스캔을 선택하는 조건

풀 테이블 스캔의 문제점 → 디스크 I/O를 자주 하게 된다는 것!

MySQL - InnoDB에서의 해결 방안 : 리드 어헤드

InnoDB의 경우에 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드 작업이 자동 실행된다.

리드 어헤드 : 어떤 영역의 데이터가 앞으로 필요해지리라는 것을 예측해서 요청이 오기 전에 미리 디스크에서 읽어 InnoDB의 버퍼 풀에 가져다 두는 것

풀 테이블 스캔이 실행되면 처음 몇 개의 데이터 페이지는 포그라운드 스레드가 페이지 읽기를 실행하지만 특정 시점부터는 읽기 작업을 백그라운드 스레드로 넘겨 미리 디스크를 읽어 InnoDB 버퍼 풀에 가져다 둔다.

이렇게 되면 포그라운드 스레드는 미리 버퍼 풀에 준비된 데이터를 가져다 사용하기만 하면 되므로 쿼리가 빨리 처리되는 것!

→ 리드 어헤드는 풀 인덱스 스캔에서도 동일하게 사용되는데, 인덱스가 2~3개의 컬럼만으로 구성되기 때문에 테이블 자체보다는 용량이 작아서 훨씬 빠른 처리가 가능한 것임

관련 페이지

285P~287P