제15장 기타
스토리지 엔진
목차
스토리지 엔진은 다양한 테이블 형에 대한 SQL 작업을 처리하는 MySQL 구성 요소입니다. InnoDB
는 기본적으로 가장 범용 스토리지 엔진이며, Oracle은 특별한 유스 케이스를 제외 테이블은이 엔진의 사용을 권장합니다. (기본적으로 MySQL 5.6의 CREATE TABLE
문은 InnoDB
테이블을 만듭니다.)
MySQL Server는 스토리지 엔진이 작동중인 MySQL 서버에로드되거나 MySQL 서버에서 언로드되고있는 플러 거블 스토리지 엔진 아키텍처를 채용하고 있습니다.
사용하는 서버가 지원하는 스토리지 엔진을 확인하려면 SHOW ENGINES
명령문을 사용합니다. Support
컬럼 값은 엔진을 사용할 수 있는지 여부를 나타냅니다. YES
, NO
또는 DEFAULT
값은 엔진이 "사용 가능", "사용할 수없는"또는 "기본 스토리지 엔진으로 사용 가능하며, 현재 설정되어있는"을 나타냅니다.
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 스토리지 엔진의 사용 사례에 대해 설명합니다. 제 14 장 "InnoDB 스토리지 엔진" 과 제 18 장 "MySQL Cluster NDB 7.3 및 MySQL Cluster NDB 7.4" 에서 설명하는 기본 InnoDB
스토리지 엔진 또는 NDB
스토리지 엔진에 대해서는 설명하지 않습니다. 고급 사용자를 위해이 장에서는 플러 거블 스토리지 엔진 아키텍처에 대해 설명합니다 ( 섹션 15.11 "MySQL 스토리지 엔진 아키텍처 개요" 를 참조하십시오).
상용 MySQL Server 바이너리에서 제공하는 스토리지 엔진 지원은 MySQL Web 사이트의 MySQL Enterprise Server 5.6 를 참조하십시오. 사용 가능한 스토리지 엔진은 사용중인 Enterprise Server 버전에 따라 다를 수 있습니다.
MySQL 스토리지 엔진에 대한 질문의 답변 내용은 섹션 A.2 "MySQL 5.6 FAQ : 스토리지 엔진" 을 참조하십시오.
MySQL 5.6이 지원하는 스토리지 엔진
InnoDB
: MySQL 5.6의 기본 스토리지 엔진.InnoDB
는 트랜잭션 안전 (ACID 준수) MySQL의 스토리지 엔진이며, 사용자 데이터를 보호하기 위해 커밋, 롤백 및 크래시 복구 기능을 제공합니다.InnoDB
의 행 레벨 락 (더 정교하지 않은 잠금에 대한 에스컬레이션은하지 않음)와 Oracle 스타일의 일관성 비 록 읽기는 다중 사용자의 동시성과 성능이 향상됩니다.InnoDB
는 기본 키에 근거한 일반적인 쿼리의 입출력을 줄이기 위해 클러스터 된 인덱스에 사용자 데이터가 저장됩니다.InnoDB
는 데이터의 무결성을 유지할 수 있도록FOREIGN KEY
참조 무결성 제약 조건도 지원되고 있습니다.InnoDB
에 대한 자세한 내용은 14 장 "InnoDB 저장 엔진" 을 참조하십시오.MyISAM
:이 테이블의 풋 프린트는 작아집니다. 테이블 수준 잠금 은 읽기 / 쓰기 작업 부하 성능이 억제되기 때문에, Web 및 데이터웨어 하우스 구성의 읽기 전용 또는 읽기가 대부분의 작업 부하의 경우에 사용되는 것이 일반적입니다.Memory
: 모든 데이터를 RAM에 저장합니다 (중요하지 않은 데이터의 빠른 검색이 필요한 환경에 빠르게 액세스하기 위해). 이 엔진은 이전에는HEAP
엔진으로 알려져있었습니다. 이 사례는 감소하고 있습니다. 버퍼 풀의 메모리 영역을 가진InnoDB
는 대부분의 데이터 또는 모든 데이터를 메모리에 유지하는 범용적이고 영구적 인 방법을 제공하고NDBCLUSTER
은 대규모 분산 데이터 세트에서 키 값의 빠른 검색이 수 합니다.CSV
:이 테이블은 쉼표로 구분 된 값이 실제 텍스트 파일입니다. CSV 테이블은 CSV 형식으로 데이터를 가져오고 덤프하고, 같은 포맷을 읽고 쓸 스크립트 및 응용 프로그램과 데이터를 교환 할 수 있습니다. CSV 테이블은 인덱스 화되지 않으므로 정상 작동시 데이터를InnoDB
테이블에 유지하고 가져 오거나 내보낼 단계에서만 CSV 테이블을 사용하는 것이 일반적입니다.Archive
:이 인덱싱되지 않은 소형 테이블은 거의 볼 수없는 대량의 이력 정보 보관 된 정보 또는 보안 감사 정보를 저장하고 검색 할 수있는 테이블입니다.Blackhole
: Blackhole 스토리지 엔진은 데이터를 사용할 수 있지만 Unix/dev/null
장치와 마찬가지로 저장하지 않습니다. 쿼리는 항상 빈 세트를 돌려줍니다. 이 테이블은 DML 문은 슬레이브 서버로 전송되지만 마스터 서버는 데이터의 자체 복사본을 보관하지 복제 구성에서 사용할 수 있습니다.NDB
(NDBCLUSTER
로도 알려져 있습니다) - 클러스터 된 데이터베이스 엔진 가동 시간과 가용성의 정도가되도록 높지 않아 말라 애플리케이션에 특히 적합합니다.참고NDB
스토리지 엔진은 표준 MySQL 5.6 릴리즈에서는 지원되지 않습니다. 현재 지원되는 MySQL Cluster 릴리스에는 MySQL 5.1 기반의 MySQL Cluster NDB 7.1, MySQL 5.5 기반의 MySQL Cluster NDB 7.2, MySQL 5.6 기반의 MySQL Cluster NDB 7.3이 포함되어 있습니다. MySQL Server가 기반 인 동안,이 자료는NDB
지원도 포함됩니다. MySQL 5.6도에 기반한 현재 개발중인 MySQL Cluster NDB 7.4이 Developer Milestone 릴리스에서도 사용할 수있게되었습니다.Merge
: MySQL DBA 또는 개발자는 일련의 동일한MyISAM
테이블을 논리적으로 그룹화하여 그들을 하나의 개체로 참조합니다. 데이터웨어 하우스 등의 VLDB 환경에 적합합니다.Federated
: 많은 물리적 서버에서 하나의 논리 서버를 만드는 데 별도의 MySQL 서버를 연결하는 기능을 제공합니다. 분산 또는 데이터 마트 환경에 매우 적합합니다.Example
:이 엔진은 새로운 스토리지 엔진 쓰기를 시작하는 방법을 보여주는 MySQL 소스 코드 예제 역할을합니다. 이것은 주로 개발자가 대상입니다. 스토리지 엔진은 아무것도하지 않는 "stub"입니다. 이 엔진으로 테이블을 만들 수 있지만, 그 데이터를 저장하거나 그들로부터 데이터를 추출 할 수 없습니다.
전체 서버 또는 스키마 전체에 동일한 스토리지 엔진을 사용한다는 제한은 없습니다. 어느 테이블에도 스토리지 엔진을 지정할 수 있습니다. 예를 들어 응용 프로그램은 InnoDB
테이블을 사용하는 경우가 대부분이며, 데이터를 스프레드 시트로 내보내기위한 CSV
테이블을 하나 임시 작업 영역에 MEMORY
테이블을 일부 가지고 있습니다.
스토리지 엔진 선택
MySQL이 제공하는 다양한 스토리지 엔진은 다른 유스 케이스에서 사용되는 것을 상정 해 설계되고 있습니다. 다음 표는 MySQL이 제공하는 여러 스토리지 엔진의 개요 보여줍니다.
표 15.1 스토리지 엔진 기능 요약
기능 | MyISAM | 메모리 | InnoDB | 아카이브 | NDB |
---|---|---|---|---|---|
스토리지 제한 | 256T 바이트 | RAM | 64T 바이트 | 없음 | 384E 바이트 |
트랜잭션 | 아니오 | 아니오 | 예 | 아니오 | 예 |
잠금 입도 | 테이블 | 테이블 | 행 | 테이블 | 행 |
MVCC | 아니오 | 아니오 | 예 | 아니오 | 아니오 |
지리 공간 데이터 형식 지원 | 예 | 아니오 | 예 | 예 | 예 |
지리 공간 인덱스의 지원 | 예 | 아니오 | 예 [a] | 아니오 | 아니오 |
B 트리 인덱스 | 예 | 예 | 예 | 아니오 | 아니오 |
T 트리 인덱스 | 아니오 | 아니오 | 아니오 | 아니오 | 예 |
해시 인덱스 | 아니오 | 예 | 아니오 [b] | 아니오 | 예 |
전체 검색 인덱싱 | 예 | 아니오 | 예 [c] | 아니오 | 아니오 |
클러스터 된 인덱스 | 아니오 | 아니오 | 예 | 아니오 | 아니오 |
데이터 캐시 | 아니오 | N / A | 예 | 아니오 | 예 |
인덱스 캐시 | 예 | N / A | 예 | 아니오 | 예 |
압축 데이터 | 예 [d] | 아니오 | 예 [e] | 예 | 아니오 |
암호화 데이터 [f] | 예 | 예 | 예 | 예 | 예 |
클러스터 데이터베이스 지원 | 아니오 | 아니오 | 아니오 | 아니오 | 예 |
복제 지원 [g] | 예 | 예 | 예 | 예 | 예 |
외래 키 지원 | 아니오 | 아니오 | 예 | 아니오 | 아니오 |
백업 / 시점 복구 [h] | 예 | 예 | 예 | 예 | 예 |
쿼리 캐시 지원 | 예 | 예 | 예 | 예 | 예 |
데이터 사전을위한 업데이트 통계 | 예 | 예 | 예 | 예 | 예 |
[a] InnoDB의 지리 공간 인덱스 지원은 MySQL 5.7.5 이상에서 사용할 수 있습니다. [b] InnoDB는 적응 해시 인덱스 기능에 대해 내부적으로 해시 인덱스를 이용합니다. [c] InnoDB의 FULLTEXT 인덱스 지원은 MySQL 5.6.4 이상에서 사용할 수 있습니다. [d] 압축 된 MyISAM 테이블을 지원하는 압축 행 형식을 사용하는 경우뿐입니다. MyISAM에서 압축 행 형식을 사용하는 테이블은 읽기 전용입니다. [e] 압축 된 InnoDB 테이블은 InnoDB Barracuda 파일 형식을 필요로합니다. [f] 스토리지 엔진 내부가 아닌 서버에서 (암호화 함수를 사용하여) 구현되어 있습니다. [g] 스토리지 엔진 내부가 아닌 서버에서 구현되어 있습니다. [h] 스토리지 엔진 내부가 아닌 서버에서 구현되어 있습니다. |