18장 대체 스토리지 엔진
목차
18.7.2 MERGE 테이블 문제
18.8 FEDERATED 스토리지 엔진
18.8.1 FEDERATED 스토리지 엔진 개요
18.8.2 FEDERATED 테이블 생성 방법
18.8.3 FEDERATED 스토리지 엔진 주의사항 및 팁
18.8.3 FEDERATED 스토리지 엔진 주의사항 및 팁
18.8.4 FEDERATED 스토리지 엔진 리소스
18.9 EXAMPLE 스토리지 엔진
18.10 기타 스토리지 엔진
18.11 MySQL 스토리지 엔진 아키텍처 개요
18.11.1 플러그형 스토리지 엔진 아키텍처
18.11.2 공통 데이터베이스 서버 계층
MySQL의 스토리지 엔진
스토리지 엔진은 다양한 테이블 유형에 대한 SQL 작업을 처리하는 MySQL 구성 요소입니다.
InnoDB
InnoDB는 기본적이고 가장 일반적인 스토리지 엔진이며, Oracle은 특수한 사용 사례를 제외한 테이블에 대해 이를 사용하는 것을 권장합니다. MySQL 8.4에서 CREATE TABLE 문은 기본적으로 InnoDB 테이블을 생성합니다.
MySQL 서버는 플러그형 스토리지 엔진 아키텍처를 사용하여 스토리지 엔진을 실행 중인 MySQL 서버에 로드하고 언로드할 수 있습니다.
서버가 지원하는 스토리지 엔진을 확인하려면 SHOW ENGINES 문을 사용하십시오. Support 열의 값은 엔진을 사용할 수 있는지를 나타냅니다. YES, NO 또는 DEFAULT의 값은 엔진이 사용 가능, 사용 불가능 또는 사용 가능하며 현재 기본 스토리지 엔진으로 설정되어 있음을 나타냅니다.
SHOW ENGINES 출력 예시
mysql> SHOW ENGINES\G *************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO *************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO ...
이 장에서는 특수 목적의 MySQL 스토리지 엔진에 대한 사용 사례를 다룹니다. 기본 InnoDB 스토리지 엔진이나 NDB 스토리지 엔진은 다루지 않으며, 이는 17장, InnoDB 스토리지 엔진과 25장, MySQL NDB Cluster 8.4에서 다루어집니다. 고급 사용자들을 위해 플러그형 스토리지 엔진 아키텍처에 대한 설명도 포함되어 있습니다(자세한 내용은 18.11절, “MySQL 스토리지 엔진 아키텍처 개요” 참조).
상업용 MySQL Server 바이너리에서 제공되는 기능에 대한 정보는 MySQL 웹사이트의 MySQL Editions를 참조하십시오. 사용 가능한 스토리지 엔진은 사용 중인 MySQL 버전에 따라 다를 수 있습니다.
MySQL 스토리지 엔진에 대한 자주 묻는 질문에 대한 답변은 A.2절, “MySQL 8.4 FAQ: 스토리지 엔진”을 참조하십시오.
MySQL 8.4 지원 스토리지 엔진
InnoDB
InnoDB: MySQL 8.4의 기본 스토리지 엔진입니다. InnoDB는 사용자 데이터를 보호하기 위해 커밋, 롤백 및 크래시 복구 기능을 갖춘 트랜잭션 안전(ACID 준수) 스토리지 엔진입니다. InnoDB의 행 수준 잠금(더 거친 세분화 잠금으로의 상승 없이)과 Oracle 스타일의 일관된 비잠금 읽기는 다중 사용자 동시성과 성능을 증가시킵니다. InnoDB는 기본 키를 기반으로 하는 일반 쿼리에 대한 I/O를 줄이기 위해 사용자 데이터를 클러스터 인덱스에 저장합니다. 데이터 무결성을 유지하기 위해 InnoDB는 FOREIGN KEY 참조 무결성 제약 조건도 지원합니다. InnoDB에 대한 자세한 내용은 17장, InnoDB 스토리지 엔진을 참조하십시오.
MyISAM
MyISAM: 이 테이블은 적은 메모리 공간을 차지합니다. 테이블 수준 잠금은 읽기/쓰기 작업에서 성능을 제한하므로, 주로 읽기 전용 또는 읽기가 대부분인 작업에서 웹 및 데이터 웨어하우징 구성에 자주 사용됩니다.
Memory
Memory: 모든 데이터를 RAM에 저장하여 비핵심 데이터의 빠른 조회가 필요한 환경에서 신속한 접근을 제공합니다. 이 엔진은 이전에 HEAP 엔진으로 알려져 있었습니다. 사용 사례는 줄어들고 있으며, InnoDB는 버퍼 풀 메모리 영역을 통해 대부분 또는 모든 데이터를 메모리에 유지하는 일반 목적의 내구성 있는 방법을 제공하고, NDBCLUSTER는 대규모 분산 데이터 세트에 대한 빠른 키-값 조회를 제공합니다.
CSV
CSV: 이 테이블은 실제로 쉼표로 구분된 값이 있는 텍스트 파일입니다. CSV 테이블은 CSV 형식으로 데이터를 가져오거나 내보낼 수 있게 해주며, 동일한 형식을 읽고 쓰는 스크립트 및 애플리케이션과 데이터를 교환할 수 있습니다. CSV 테이블은 인덱스가 없기 때문에 일반적인 작업 중에는 데이터를 InnoDB 테이블에 보관하고, 가져오기 또는 내보내기 단계에서만 CSV 테이블을 사용합니다.
Archive
Archive: 이 압축된 비인덱스 테이블은 드물게 참조되는 대량의 역사적, 아카이브 또는 보안 감사 정보를 저장하고 검색하는 데 사용됩니다.
Blackhole
Blackhole: Blackhole 스토리지 엔진은 데이터를 수락하지만 저장하지 않으며, 이는 Unix의 /dev/null 장치와 유사합니다. 쿼리는 항상 빈 집합을 반환합니다. 이러한 테이블은 DML 문이 복제 서버로 전송되지만 소스 서버가 데이터의 자체 복사본을 유지하지 않는 복제 구성에서 사용할 수 있습니다.
NDB
NDB (또는 NDBCLUSTER): 이 클러스터형 데이터베이스 엔진은 가능한 한 높은 가동 시간과 가용성을 요구하는 애플리케이션에 특히 적합합니다.
Merge
Merge: MySQL DBA 또는 개발자가 동일한 MyISAM 테이블 시리즈를 논리적으로 그룹화하여 하나의 객체로 참조할 수 있게 해줍니다. 데이터 웨어하우징과 같은 VLDB 환경에 적합합니다.
Federated
Federated: 여러 개의 물리적 서버에서 하나의 논리적 데이터베이스를 생성하기 위해 별도의 MySQL 서버를 연결할 수 있는 기능을 제공합니다. 분산 또는 데이터 마트 환경에 매우 적합합니다.
예제
이 엔진은 MySQL 소스 코드에서 새로운 스토리지 엔진을 작성하는 방법을 보여주는 예제로 사용됩니다. 주로 개발자에게 관심이 있습니다. 이 스토리지 엔진은 아무것도 하지 않는 "스텁"입니다. 이 엔진으로 테이블을 생성할 수 있지만, 그 안에 데이터를 저장하거나 검색할 수는 없습니다.
서버나 스키마 전체에 대해 동일한 스토리지 엔진을 사용하는 데 제한이 없습니다. 모든 테이블에 대해 스토리지 엔진을 지정할 수 있습니다. 예를 들어, 애플리케이션은 대부분 InnoDB 테이블을 사용하고, 데이터를 스프레드시트로 내보내기 위한 하나의 CSV 테이블과 임시 작업 공간을 위한 몇 개의 MEMORY 테이블을 사용할 수 있습니다.
스토리지 엔진 선택
MySQL과 함께 제공되는 다양한 스토리지 엔진은 서로 다른 사용 사례를 염두에 두고 설계되었습니다. 다음 표는 MySQL과 함께 제공되는 일부 스토리지 엔진에 대한 개요를 제공하며, 표 뒤에는 설명 노트가 있습니다.
표 18.1 스토리지 엔진 기능 요약
기능 | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
B-tree 인덱스 | 예 | 예 | 예 | 아니오 | 아니오 |
백업/시점 복구 (노트 1) | 예 | 예 | 예 | 예 | 예 |
클러스터 데이터베이스 지원 | 아니오 | 아니오 | 아니오 | 아니오 | 예 |
클러스터 인덱스 | 아니오 | 아니오 | 예 | 아니오 | 아니오 |
압축 데이터 | 예 (노트 2) | 아니오 | 예 | 예 | 아니오 |
데이터 캐시 | 아니오 | N/A | 예 | 아니오 | 예 |
암호화된 데이터 | 예 (노트 3) | 예 (노트 3) | 예 (노트 4) | 예 (노트 3) | 예 (노트 5) |
외래 키 지원 | 아니오 | 아니오 | 예 | 아니오 | 예 |
전체 텍스트 검색 인덱스 | 예 | 아니오 | 예 (노트 6) | 아니오 | 아니오 |
지리공간 데이터 유형 지원 | 예 | 아니오 | 예 | 예 | 예 |
지리공간 인덱싱 지원 | 예 | 아니오 | 예 (노트 7) | 아니오 | 아니오 |
해시 인덱스 | 아니오 | 예 | 아니오 (노트 8) | 아니오 | 예 |
인덱스 캐시 | 예 | N/A | 예 | 아니오 | 예 |
잠금 세분성 | 테이블 | 테이블 | 행 | 행 | 행 |
MVCC | 아니오 | 아니오 | 예 | 아니오 | 아니오 |
복제 지원 (노트 1) | 예 | 제한적 (노트 9) | 예 | 예 | 예 |
저장 한계 | 256TB | RAM | 64TB | 없음 | 384EB |
T-tree 인덱스 | 아니오 | 아니오 | 아니오 | 아니오 | 예 |
트랜잭션 | 아니오 | 아니오 | 예 | 아니오 | 예 |
데이터 사전 업데이트 통계 | 예 | 예 | 예 | 예 | 예 |
노트:
-
서버에서 구현되었으며, 저장 엔진에서는 구현되지 않았습니다.
-
압축된 MyISAM 테이블은 압축된 행 형식을 사용할 때만 지원됩니다. MyISAM과 함께 압축된 행 형식을 사용하는 테이블은 읽기 전용입니다.
-
암호화 함수들을 통해 서버에서 구현되었습니다.
-
암호화 함수들을 통해 서버에서 구현되었습니다; MySQL 5.7 이상에서는 데이터 암호화가 지원됩니다.
-
암호화 함수들을 통해 서버에서 구현되었습니다; NDB 8.0.22부터 암호화된 NDB 백업이 지원됩니다; NDB 8.0.29 이상에서는 투명한 NDB 파일 시스템 암호화가 지원됩니다.
-
FULLTEXT 인덱스에 대한 지원은 MySQL 5.6 이상에서 가능합니다.
-
지리공간 인덱싱에 대한 지원은 MySQL 5.7 이상에서 가능합니다.
-
InnoDB는 Adaptive Hash Index 기능을 위해 내부적으로 해시 인덱스를 활용합니다.
-
이 섹션의 후반부에서 논의를 참조하십시오.