ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인덱스 개수가 늘어날수록 InnoDB 버퍼를 위한 메모리가 더 많이 필요한 이유
    책/Real MySql 2021. 8. 3. 09:06

    InnoDB는 MySQL의 기본 스토리지 엔진으로, 데이터베이스 성능을 최적화하기 위해 다양한 기법을 사용한다. 그중 하나가 버퍼 풀(Buffer Pool)이다. 버퍼 풀은 디스크 I/O를 최소화하고, 데이터베이스의 응답 시간을 단축시키는 중요한 역할을 한다. 

     

    InnoDB 버퍼 풀(Buffer Pool)의 역할

    버퍼 풀은 디스크에 저장된 데이터와 인덱스 페이지를 메모리에 캐싱하여, 자주 사용되는 데이터에 빠르게 접근할 수 있도록 한다. 이를 통해 디스크 접근을 줄이고, 데이터베이스 성능을 향상시킨다. 버퍼 풀의 주요 역할은 다음과 같다:

    1. 데이터 페이지 캐싱: 자주 접근하는 데이터 페이지를 메모리에 유지하여, 디스크 I/O를 줄인다.
    2. 인덱스 페이지 캐싱: 자주 사용되는 인덱스 페이지를 메모리에 캐싱하여, 인덱스를 통한 데이터 접근 속도를 높인다.

    인덱스의 역할과 구조

    인덱스는 데이터베이스에서 검색 성능을 향상시키기 위해 사용되는 구조이다. InnoDB의 인덱스는 B-tree 구조로 되어 있으며, 루트 노드, 내부 노드, 리프 노드로 구성된다. 각 노드는 페이지 단위로 관리되며, 디스크에 저장된다. 인덱스를 통해 데이터를 검색할 때, 데이터베이스는 인덱스 페이지를 참조하여 필요한 데이터를 빠르게 찾을 수 있다. 이러한 인덱스 페이지들은 자주 사용되기 때문에, 버퍼 풀에 캐싱되어야 한다.

    인덱스 개수 증가와 메모리 사용량

    인덱스 개수가 늘어날수록 버퍼 풀을 위한 메모리 사용량이 증가하는 이유는 다음과 같다:

    1. 인덱스 페이지 증가:
      • 인덱스 개수가 늘어나면, 각 인덱스에 대한 페이지 수가 증가한다. 이는 데이터베이스가 더 많은 인덱스 페이지를 관리해야 함을 의미한다.
      • 더 많은 인덱스 페이지가 생성되면, 버퍼 풀에 캐싱해야 할 페이지 수도 증가한다.
    2. 메모리 캐싱 필요성:
      • 인덱스 페이지는 검색 성능을 높이기 위해 자주 참조된다. 따라서, 버퍼 풀에 캐싱되어야 디스크 I/O를 최소화할 수 있다.
      • 인덱스 개수가 늘어나면, 자주 참조되는 인덱스 페이지 수도 증가하므로, 버퍼 풀에 더 많은 메모리 공간이 필요하다.

     

    예시

    예를 들어, 두 개의 테이블이 있다고 가정해보자:

    • 테이블 A: 인덱스가 하나만 있는 테이블
    • 테이블 B: 인덱스가 여러 개 있는 테이블

    테이블 B는 쿼리를 처리할 때 여러 인덱스 페이지에 접근해야 하므로, 버퍼 풀에 더 많은 인덱스 페이지를 캐싱해야 한다. 이로 인해 테이블 B는 테이블 A보다 버퍼 풀에서 더 많은 메모리 공간을 필요로 하게 된다.

     

    인덱스는 디스크에 저장되지만, InnoDB는 성능 최적화를 위해 버퍼 풀을 사용하여 자주 사용하는 인덱스 페이지를 메모리에 캐싱한다. 인덱스 개수가 늘어나면, 더 많은 인덱스 페이지가 버퍼 풀에 캐싱되어야 하므로, 버퍼 풀을 위한 메모리 사용량이 증가하게 된다. 따라서, 인덱스 개수가 늘어날수록 InnoDB 버퍼 풀을 위한 메모리가 더 많이 필요하게 된다.

     

     

     

    참고 자료:

     

    MySQL :: MySQL 8.0 Reference Manual :: 17 The InnoDB Storage Engine

    The world's most popular open source database Contact MySQL  |  Login  |  Register

    dev.mysql.com

     

     

    SQL Indexing and Tuning e-Book for developers: Use The Index, Luke covers Oracle, MySQL, PostgreSQL, SQL Server, ...

    SQL indexing and tuning tutorial for developers. No unnecessary database details—just what developers need to know. Covers all major SQL databases.

    use-the-index-luke.com

     

     

    ' > Real MySql' 카테고리의 다른 글

    innoDB의 버퍼풀과 리드어헤드  (0) 2021.08.12
    InnoDB 인덱스와 클러스터링 인덱스  (0) 2021.05.26
Designed by Tistory.