MySQL 데이터베이스 아키텍처의 메모리 아키텍처

        MySQL 5.5 버전부터는 InnoDB 스토리지 엔진이 기본으로 사용되며, 트랜잭션 처리가 좋고 크래시 복구 기능이 있으며 일상적인 개발에 널리 사용됩니다.

        메모리 구조에서는 주로 Buffer Pool , Change Buffer , Adaptive Hash Index, Log Buffer 의 네 가지 주요 블록으로 나뉩니다 . 이 네 부분은 다음에 설명됩니다.

1). 버퍼 풀

        InnoDB 스토리지 엔진은 디스크 파일 스토리지를 기반으로 물리적인 하드 디스크에 접근하는 것과 메모리에 접근하는 것은 속도 차이가 크며, 둘 사이의 I/O 효율성 차이를 최대한 보완하기 위해서는 자주 사용하는 데이터를 버퍼 풀에 로드하여 접근할 때마다 디스크 I/O를 피하는 것이 필요 하다 .

        InnoDB의 버퍼 풀에는 인덱스 페이지와 데이터 페이지가 캐시될 뿐만 아니라 실행 취소 페이지, 삽입 캐시, 적응형 해시 인덱스, InnoDB 잠금 정보도 포함 됩니다.

        Buffer Pool Buffer Pool은 주기억장치에 있는 영역으로 디스크에서 자주 연산되는 실제 데이터를 캐싱할 수 있으며, 추가, 삭제, 수정, 조회 작업을 수행할 때 버퍼 풀에 있는 데이터를 먼저 연산(버퍼 풀에 데이터가 없을 경우 디스크에서 불러와서 캐싱)한 후 일정 주기로 디스크에 Refresh하여 디스크 IO를 줄이고 처리 속도를 높인다 .

        버퍼 풀의 단위는 Page 이며, 최하위 계층은 Page 를 관리하기 위해 연결 리스트 데이터 구조를 사용합니다 . 상태에 따라 페이지는 세 가지 유형으로 나뉩니다.

        • free page: free page , 사용되지 않음.

        • 깨끗한 페이지: 페이지가 사용되고 있으며 데이터가 수정되지 않았습니다.

        • 더티 페이지: 더티 페이지, 페이지가 사용 중이고 데이터가 수정되었으며 그 안의 데이터가 디스크의 데이터와 일치하지 않습니다.
         전용 서버에서는 일반적으로 물리적 메모리의 80 % 정도가 버퍼 풀에 할당됩니다. 매개변수 설정: 변수 표시
'innodb_buffer_pool_size'처럼;

2). 버퍼 변경

         Change Buffer , Change Buffer (non-unique secondary index pages 의 경우) DML 문 실행 시 이러한 Data Pages 가 Buffer Pool 에 없으면 디스크가 직접 동작하지 않고 Change Buffer 에 데이터 변경이 저장됨 Change Buffer
, 향후 데이터를 읽을 때 데이터가 병합되어 버퍼 풀로 복원된 다음 병합된 데이터가 디스크로 새로 고쳐집니다.
       
         버퍼 변경의 의미는 무엇입니까?
        클러스터형 인덱스와 달리 보조 인덱스는 일반적으로 고유하지 않으며 비교적 임의의 순서로 보조 인덱스에 삽입됩니다. 마찬가지로 삭제 및 업데이트는 인덱스 트리에서 인접하지 않은 보조 인덱스 페이지에 영향을 미칠 수 있으며, 매번 디스크를 가동하면 디스크 IO가 많이 발생하게 됩니다. ChangeBuffer를 사용하면 버퍼 풀에서 병합 처리를 수행하여 디스크 IO를 줄일 수 있습니다 .
        

삼). 적응형 해시 인덱스

         버퍼 풀 데이터 에 대한 쿼리를 최적화하기 위한 적응형 해시 인덱스입니다. MySQL innoDB 엔진은 해시 인덱스를 직접 지원하지 않지만 이 적응형 해시 인덱스 라는 기능을 제공합니다 . 앞에서 언급했듯이 해시 인덱스는 일반적으로 하나의 IO 만 필요로 하는 반면 B + 트리는 여러 개의 일치가 필요할 해시 인덱스의 효율성은 높지만 해시 인덱스는 범위 쿼리 및 퍼지 일치에 적합하지 않기 때문에 등가 매칭을 수행할 때 해시 인덱스의 일반적인 성능은 B+ 트리보다 높습니다.
         InnoDB 스토리지 엔진은 테이블의 각 인덱스 페이지의 쿼리를 모니터링하며, 해시 인덱스가 특정 조건에서 속도를 향상시킬 수 있는 것으로 관찰되면 적응형 해시 인덱스라고 하는 해시 인덱스가 설정됩니다 .
         수동 개입이 없는 적응형 해시 인덱스는 상황에 따라 시스템에서 자동으로 완성됩니다.
         매개변수: adaptive_hash_index

4). 로그 버퍼

         로그 버퍼 : 로그 버퍼는 디스크에 기록할 로그 로그 데이터( 리두 로그 , 언두 로그 ) 를 저장하기 위해 사용되며,
기본 크기는 16MB 이며 로그 버퍼의 로그는 주기적으로 디스크에 플러시됩니다. 많은 행을 업데이트, 삽입 또는 삭제하는 트랜잭션이 필요한 경우 로그 버퍼의 크기를 늘리면 디스크 I/O를 줄일 수 있습니다 .
         파라미터: innodb_log_buffer_size : 버퍼 크기
        innodb_flush_log_at_trx_commit : 로그가 디스크로 플러시될 때 값은 주로 다음 세 가지를 포함합니다.
        1: 트랜잭션이 커밋될 때마다 로그가 기록되고 디스크에 플러시됩니다. 기본값입니다.
         0: 로그가 기록되고 초당 한 번 디스크에 플러시됩니다.
        2: 각 트랜잭션이 커밋된 후 로그가 기록되고 초당 한 번씩 디스크에 플러시됩니다.

추천

출처blog.csdn.net/weixin_59526725/article/details/126035851