ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • innoDB의 버퍼풀과 리드어헤드
    책/Real MySql 2021. 8. 12. 09:32

    디스크와 인덱스 페이지

    디스크는 데이터를 영구적으로 저장하는 물리적 장치이다. 데이터베이스는 디스크에 데이터를 저장하고 필요할 때 이를 읽어 메모리로 가져온다. MySQL InnoDB는 데이터를 페이지 단위로 관리한다. 페이지는 데이터베이스의 논리적 저장 단위로, 일반적으로 16KB 크기를 가진다. 하나의 페이지에는 여러 레코드가 저장될 수 있다.

     

    인덱스는 특정 컬럼에 대한 데이터의 위치를 빠르게 찾기 위해 사용하는 구조이다. 인덱스는 디스크에 저장되지만, 인덱스를 이용한 데이터 검색은 페이지 단위로 이루어진다. 인덱스를 통해 관련 페이지를 찾고, 해당 페이지를 메모리로 불러와서 필요한 데이터를 읽는다.

     

    버퍼 풀(Buffer Pool)

    InnoDB의 버퍼 풀은 메모리 내에서 동작하는 데이터베이스 성능 최적화 메커니즘이다. 버퍼 풀은 디스크 I/O를 줄이고, 데이터를 빠르게 접근할 수 있도록 돕는다. 즉, 버퍼 풀은 물리적 메모리의 일부를 차지하며, 주요 역할은 다음과 같다:

    1. 캐싱: 디스크에서 읽어온 데이터 페이지와 인덱스 페이지를 버퍼 풀에 저장한다. 이를 통해 자주 접근하는 데이터를 메모리에 유지하여 빠른 접근이 가능하게 한다.
    2. 쓰기 지연: 데이터를 수정할 때, 직접 디스크에 기록하는 대신 버퍼 풀에 저장하고 나중에 디스크에 기록한다. 이를 통해 디스크 I/O를 줄이고 성능을 향상시킨다.
    3. LRU 알고리즘: 자주 사용되지 않는 페이지는 버퍼 풀에서 제거하고, 새로운 페이지를 저장할 공간을 확보한다. 이 과정은 LRU(Least Recently Used) 알고리즘을 사용하여 관리된다.

    버퍼 풀 덕분에 InnoDB는 디스크 접근 빈도를 줄이고, 자주 사용하는 데이터를 메모리에 유지하여 빠르게 접근할 수 있다.

     

     

    리드 어헤드(Read-Ahead)

    리드 어헤드는 데이터베이스 시스템이 성능을 최적화하기 위해 사용하는 기술 중 하나이다. 이 기술은 시스템이 앞으로 필요할 데이터를 미리 예측하여 메모리로 읽어들이는 방식이다. MySQL InnoDB에서도 리드 어헤드 기능을 사용하여 디스크 I/O 성능을 개선한다.

    리드 어헤드의 동작 방식은 다음과 같다:

     

    1. 순차 접근 패턴 감지: 데이터베이스가 순차적으로 데이터를 접근하는 패턴을 감지한다. 예를 들어, 대량의 데이터를 순차적으로 읽는 쿼리나 테이블 스캔 등이 있을 때 이를 인지한다.
    2. 미리 읽기: 순차 접근 패턴이 감지되면, 데이터베이스는 앞으로 필요할 것으로 예상되는 데이터 페이지들을 미리 디스크에서 읽어와 버퍼 풀에 적재한다.
    3. 디스크 I/O 최소화: 이렇게 미리 데이터를 읽어 놓으면, 실제로 쿼리가 해당 데이터를 필요로 할 때 디스크에 접근하는 시간을 줄일 수 있다. 이는 디스크 I/O를 최소화하고 쿼리 성능을 향상시키는 효과가 있다.

     

    InnoDB는 두 가지 리드 어헤드 방식인 "선형 리드 어헤드"와 "랜덤 리드 어헤드"를 사용한다:

    • 선형 리드 어헤드: 순차적으로 데이터를 읽는 경우에 사용된다. 예를 들어, 테이블 풀 스캔이나 인덱스 스캔 시 선형 리드 어헤드가 작동한다.
    • 랜덤 리드 어헤드: 랜덤 접근 패턴이 감지될 때 사용된다. 랜덤 리드 어헤드는 특히 인덱스를 통해 비순차적으로 데이터를 접근하는 경우에 유용하다.

    리드 어헤드 기능을 통해 InnoDB는 디스크 I/O 성능을 최적화하고, 쿼리 응답 시간을 줄일 수 있다.

Designed by Tistory.