목차
스토리지 엔진 기능
위에서 스토리지 엔진이 무엇인지, 테이블 생성 시 스토리지 엔진을 지정하는 방법을 소개했고, 다음으로 더 중요한 세 가지 스토리지 엔진인 InnoDB, MyISAM , Memory 의 특징을 소개하겠습니다 .
InnoDB
소개하다
InnoDB는 높은 신뢰성과 고성능을 결합한 범용 스토리지 엔진으로, MySQL 5.5 이후에는 InnoDB가 기본 MySQL 스토리지 엔진이다.
특징
- DML (데이터베이스 테이블의 데이터 레코드 추가, 삭제 및 수정) 작업은 ACID( 원자성, 일관성, 격리 및 내구성) 모델을 따르고 트랜잭션을 지원합니다.
- 동시 액세스 성능을 향상시키는 행 수준 잠금
- 데이터 무결성과 정확성을 보장하기 위해 외래 키 FOREIGN KEY 제약 조건을 지원합니다.
문서
xxx.ibd
xxx는 테이블 이름을 나타내며, innoDB 엔진의 각 테이블은 테이블 구조(frm-early, sdi-new 버전), 데이터 및 테이블 인덱스를 저장하는 테이블스페이스 파일에 해당합니다.
테이블 구조 파일 frm은 MySQL 8.0 이후 테이블 구조가 데이터 포인트 sdi에 저장되고 sdi는 InnoDB 테이블 공간 파일에 통합됩니다.
매개변수: innodb_file_per_table(이 매개변수가 켜져 있으면 각 테이블에 해당 테이블스페이스 파일이 있음)
쿼리 시스템 매개변수 설정:
show variables like 'innodb_file_per_table';
논리적 저장 구조
- 테이블스페이스: InnoDB 스토리지 엔진의 논리적 구조의 최상위 수준입니다. ibd 파일은 실제로 테이블스페이스 파일입니다. 테이블스페이스에는 여러 세그먼트 세그먼트가 포함될 수 있습니다.
- 세그먼트(Segment): 테이블스페이스는 다양한 세그먼트로 구성되며, 공통 세그먼트에는 데이터 세그먼트, 인덱스 세그먼트, 롤백 세그먼트 등이 포함됩니다. InnoDB의 세그먼트 관리는 엔진 자체에 의해 수행되며 사람의 제어가 필요하지 않습니다. 세그먼트에는 여러 영역이 포함됩니다.
- 면적(Area) : 면적은 테이블스페이스의 단위 구조이며, 각 면적의 크기는 1M이다. 기본적으로 InnoDB 스토리지 엔진 페이지 크기는 16K입니다. 즉, 한 영역에 64개의 연속 페이지가 있습니다.
- 페이지: 페이지는 영역을 구성하는 가장 작은 단위이며, InnoDB 스토리지 엔진이 디스크를 관리하는 가장 작은 단위이기도 하며, 각 페이지의 기본 크기는 16KB입니다. 페이지 연속성을 보장하기 위해 InnoDB 스토리지 엔진은 매번 디스크에서 4~5개 영역에 적용됩니다.
- 행(Row): InnoDB 스토리지 엔진은 행 지향적입니다. 즉, 데이터가 행에 저장된다는 의미입니다. 테이블을 정의할 때 지정된 필드 외에도 각 행에는 두 개의 숨겨진 필드도 포함됩니다(자세한 내용은 나중에 소개합니다).
영역과 페이지의 크기는 고정되어 있으며, 그 중 Trx id는 마지막 작업 트랜잭션의 ID를 나타내고, Roll 포인터는 일부 포인터, col은 테이블의 해당 필드를 나타냅니다.
마이ISAM
소개하다
MyISAM은 MySQL의 초기 기본 스토리지 엔진이었습니다.
특징
- 트랜잭션을 지원하지 않으며 외래 키를 지원하지 않습니다.
- 테이블 잠금은 지원하지만 행 잠금은 지원하지 않습니다.
- 빠른 액세스
문서
- xxx.sdi: 테이블 구조 정보를 저장합니다.
- xxx.MYD: 데이터 저장
- xxx.MYI: 저장 인덱스
메모리
소개하다
메모리 엔진의 테이블 데이터는 메모리에 저장되며, 하드웨어 문제나 정전으로 인해 해당 테이블은 임시 테이블이나 캐시로만 사용할 수 있습니다.
특징
- 메모리 저장
- 해시 인덱스(기본값)
문서
xxx.sdi: 테이블 구조 정보를 저장합니다.
차이점과 특징
특징 | InnoDB | 마이ISAM | 메모리 |
---|---|---|---|
저장 한도 | 64TB | 가지다 | 가지다 |
거래 보안 | 지원하다 | - | - |
잠금 메커니즘 | 행 잠금 | 테이블 잠금 | 테이블 잠금 |
B+트리 인덱스 | 지원하다 | 지원하다 | 지원하다 |
해시 인덱스 | - | - | 지원하다 |
전문 색인 | 지원됨(버전 5.6 이후) | 지원하다 | - |
공간 활용 | 높은 | 낮은 | 해당 없음 |
메모리 사용량 | 높은 | 낮은 | 중간 |
일괄 삽입 속도 | 낮은 | 높은 | 높은 |
외래 키 지원 | 지원하다 | - | - |
인터뷰 질문들
InnoDB 엔진과 MyISAM 엔진의 차이점은 무엇입니까?
- InnoDB 엔진은 트랜잭션을 지원하지만 MyISAM은 지원하지 않습니다.
- InnoDB 엔진은 행 잠금과 테이블 잠금을 지원하는 반면 MyISAM은 테이블 잠금만 지원하고 행 잠금은 지원하지 않습니다.
- InnoDB 엔진은 외래 키를 지원하지만 MyISAM은 이를 지원하지 않습니다.
주요 차이점은 위의 3가지 점이며, 인덱스 구조, 저장 제한 등에 관해서도 좀 더 심도 있는 답변을 주실 수 있습니다. /doc/refman/8.0/en/innodb-소개 .html
https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html
스토리지 엔진 선택
스토리지 엔진을 선택할 때, 응용 시스템의 특성에 따라 적절한 스토리지 엔진을 선택해야 합니다. 복잡한 응용 시스템의 경우 실제 조건에 따라 여러 스토리지 엔진을 선택하고 결합할 수 있습니다.
- InnoDB : Mysql의 기본 스토리지 엔진으로 트랜잭션 및 외래 키를 지원합니다. 애플리케이션이 트랜잭션 무결성에 대한 요구 사항이 상대적으로 높고 동시 조건에서 데이터 일관성이 필요하며 데이터 작업에 삽입 및 쿼리 외에도 많은 업데이트 및 삭제 작업이 포함되는 경우 InnoDB 스토리지 엔진이 더 적합한 선택입니다.
- MyISAM: 애플리케이션이 주로 읽기 작업과 삽입 작업을 기반으로 하고 몇 가지 업데이트 및 삭제 작업만 수행하며 트랜잭션 무결성 및 동시성에 대한 요구 사항이 그리 높지 않은 경우 이 스토리지 엔진을 선택하는 것이 매우 적합합니다. (NoSQL 데이터베이스 MongoDB 로 대체 가능 )
- MEMORY: 빠른 접근 속도로 모든 데이터를 메모리에 저장하며 주로 임시 테이블 및 캐시용으로 사용됩니다. MEMORY의 단점은 테이블 크기에 제한이 있다는 점인데, 너무 큰 테이블은 메모리에 캐시할 수 없고 데이터 보안도 보장할 수 없다. (NoSQL 데이터베이스 Redis 로 대체 가능 )
끝
학습 내용: Dark Horse 프로그래머 - MySQL 데이터베이스 과정