Loading...
MySQL 9.5 Reference Manual 9.5의 18 Alternative Storage Engines의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Table of Contents
18.1 Setting the Storage Engine
18.2 The MyISAM Storage Engine
18.2.1 MyISAM Startup Options
18.2.2 Space Needed for Keys
18.2.3 MyISAM Table Storage Formats
18.2.4 MyISAM Table Problems
18.3 The MEMORY Storage Engine
18.4 The CSV Storage Engine
18.4.1 Repairing and Checking CSV Tables
18.4.2 CSV Limitations
18.5 The ARCHIVE Storage Engine
18.6 The BLACKHOLE Storage Engine
18.7 The MERGE Storage Engine
18.7.1 MERGE Table Advantages and Disadvantages
18.7.2 MERGE Table Problems
18.8 The FEDERATED Storage Engine
18.8.1 FEDERATED Storage Engine Overview
18.8.2 How to Create FEDERATED Tables
18.8.3 FEDERATED Storage Engine Notes and Tips
18.8.4 FEDERATED Storage Engine Resources
18.9 The EXAMPLE Storage Engine
18.10 Other Storage Engines
18.11 Overview of MySQL Storage Engine Architecture
18.11.1 Pluggable Storage Engine Architecture
18.11.2 The Common Database Server Layer
Storage engine은 서로 다른 테이블 타입에 대해 SQL 연산을 처리하는 MySQL 컴포넌트입니다. InnoDB는 기본이자 가장 범용적인 스토리지 엔진이며, Oracle은 특수한 용례를 제외한 테이블에 대해 이를 사용할 것을 권장합니다. (MySQL 9.5의 CREATE TABLE 문은 기본적으로 InnoDB 테이블을 생성합니다.)
MySQL Server는 플러그인형 스토리지 엔진 아키텍처를 사용하며, 이를 통해 실행 중인 MySQL 서버에 스토리지 엔진을 로드 및 언로드할 수 있습니다.
서버가 어떤 스토리지 엔진을 지원하는지 확인하려면 SHOW ENGINES 문을 사용합니다. Support 컬럼의 값은 엔진을 사용할 수 있는지를 나타냅니다. 값이 YES, NO, 또는 DEFAULT인 경우, 해당 엔진이 사용 가능, 사용 불가능, 또는 사용 가능하며 현재 기본 스토리지 엔진으로 설정되어 있음을 의미합니다.
1mysql> SHOW ENGINES\G 2*************************** 1. row *************************** 3 Engine: PERFORMANCE_SCHEMA 4 Support: YES 5 Comment: Performance Schema 6Transactions: NO 7 XA: NO 8 Savepoints: NO 9*************************** 2. row *************************** 10 Engine: InnoDB 11 Support: DEFAULT 12 Comment: Supports transactions, row-level locking, and foreign keys 13Transactions: YES 14 XA: YES 15 Savepoints: YES 16*************************** 3. row *************************** 17 Engine: MRG_MYISAM 18 Support: YES 19 Comment: Collection of identical MyISAM tables 20Transactions: NO 21 XA: NO 22 Savepoints: NO 23*************************** 4. row *************************** 24 Engine: BLACKHOLE 25 Support: YES 26 Comment: /dev/null storage engine (anything you write to it disappears) 27Transactions: NO 28 XA: NO 29 Savepoints: NO 30*************************** 5. row *************************** 31 Engine: MyISAM 32 Support: YES 33 Comment: MyISAM storage engine 34Transactions: NO 35 XA: NO 36 Savepoints: NO 37...
이 장에서는 특수 목적 MySQL 스토리지 엔진의 사용 사례를 다룹니다. 기본 스토리지 엔진인 InnoDB 또는 NDB 스토리지 엔진은 여기서 다루지 않으며, 각각 Chapter 17, The InnoDB Storage Engine 및 Chapter 25, MySQL NDB Cluster 9.5에서 다룹니다. 고급 사용자를 위해, 플러그인형 스토리지 엔진 아키텍처에 대한 설명도 포함되어 있습니다( Section 18.11, “Overview of MySQL Storage Engine Architecture” 참조).
상용 MySQL Server 바이너리에서 제공되는 기능에 대한 정보는 MySQL 웹사이트의 MySQL Editions를 참조하십시오. 사용 가능한 스토리지 엔진은 사용하는 MySQL 에디션에 따라 달라질 수 있습니다.
MySQL 스토리지 엔진에 대해 자주 묻는 질문에 대한 답변은 Section A.2, “MySQL 9.5 FAQ: Storage Engines”를 참조하십시오.
MySQL 9.5의 기본 스토리지 엔진입니다.
InnoDB는 MySQL용 트랜잭션 안전(ACID 준수) 스토리지 엔진으로, 사용자 데이터를 보호하기 위한 커밋, 롤백, 크래시 복구 기능을 제공합니다. InnoDB의 행 단위 잠금(잠금의 거친 단위로의 승격 없이)과 Oracle 스타일의 일관된 비잠금 읽기는 다중 사용자 동시성과 성능을 향상시킵니다. InnoDB는 기본 키 기반의 일반적인 쿼리에 대한 I/O를 줄이기 위해 클러스터형 인덱스에 사용자 데이터를 저장합니다. 데이터 무결성을 유지하기 위해 InnoDB는 FOREIGN KEY 참조 무결성 제약도 지원합니다. InnoDB에 대한 자세한 정보는 Chapter 17, The InnoDB Storage Engine을 참조하십시오.
이러한 테이블은 차지하는 공간이 작습니다.
Table-level locking은 읽기/쓰기를 혼합한 워크로드에서 성능을 제한하므로, 웹 및 데이터 웨어하우징 구성에서 읽기 전용 또는 읽기 위주의 워크로드에 자주 사용됩니다.
모든 데이터를 RAM에 저장하여, 중요하지 않은 데이터를 빠르게 조회해야 하는 환경에서 빠른 액세스를 제공합니다. 이 엔진은 이전에는 HEAP 엔진으로 알려져 있었습니다. 이 엔진의 사용 사례는 감소하고 있습니다. 버퍼 풀 메모리 영역을 사용하는 InnoDB는 대부분 또는 모든 데이터를 메모리에 유지하기 위한 범용적이고 내구성 있는 방식을 제공하며, NDBCLUSTER는 거대한 분산 데이터 집합에 대해 빠른 키-값 조회를 제공합니다.
CSV:이 엔진의 테이블은 실제로 콤마로 구분된 값을 가진 텍스트 파일입니다. CSV 테이블을 사용하면 동일한 포맷을 읽고 쓰는 스크립트 및 애플리케이션과 데이터를 교환하기 위해 CSV 포맷으로 데이터를 가져오거나 덤프할 수 있습니다. CSV 테이블은 인덱스가 없으므로, 일반적으로 정상 운영 중에는 데이터를 InnoDB 테이블에 유지하고, 가져오기 또는 내보내기 단계에서만 CSV 테이블을 사용합니다.
이러한 콤팩트하고 인덱스가 없는 테이블은 드물게 참조되는 대량의 과거, 아카이브된 또는 보안 감사 정보를 저장하고 조회하는 용도로 의도되었습니다.
Blackhole 스토리지 엔진은 Unix의 /dev/null 디바이스와 유사하게 데이터를 받아들이지만 저장하지 않습니다. 쿼리는 항상 빈 결과 집합을 반환합니다. 이러한 테이블은 DML 문이 레플리카 서버로 전송되지만 소스 서버는 자체 데이터 사본을 유지하지 않는 복제 구성에서 사용할 수 있습니다.
NDB (또는 NDBCLUSTER라고도 함):이 클러스터형 데이터베이스 엔진은 가능한 최고 수준의 가동 시간과 가용성이 요구되는 애플리케이션에 특히 적합합니다.
MySQL DBA 또는 개발자가 동일한 MyISAM 테이블 여러 개를 논리적으로 그룹화하고 이를 하나의 객체로 참조할 수 있게 해줍니다. 데이터 웨어하우징과 같은 VLDB 환경에 적합합니다.
여러 물리적 서버로부터 하나의 논리적 데이터베이스를 만들기 위해 개별 MySQL 서버를 연결하는 기능을 제공합니다. 분산 환경 또는 데이터 마트 환경에 매우 적합합니다.
이 엔진은 새로운 스토리지 엔진 작성을 시작하는 방법을 보여주는 MySQL 소스 코드 내의 예제로 제공됩니다. 주로 개발자에게 흥미로운 대상입니다. 이 스토리지 엔진은 아무 작업도 하지 않는 “stub”입니다. 이 엔진으로 테이블을 생성할 수는 있지만, 그 테이블에 데이터를 저장하거나 그로부터 데이터를 조회할 수는 없습니다.
하나의 서버 또는 스키마 전체에 대해 동일한 스토리지 엔진만 사용해야 하는 것은 아닙니다. 임의의 테이블에 대해 스토리지 엔진을 지정할 수 있습니다. 예를 들어, 어떤 애플리케이션은 대부분 InnoDB 테이블을 사용하되, 스프레드시트로 데이터를 내보내기 위한 CSV 테이블 하나와 임시 작업 공간을 위한 MEMORY 테이블 몇 개를 사용할 수 있습니다.
Choosing a Storage Engine
MySQL에서 제공되는 다양한 스토리지 엔진은 서로 다른 사용 사례를 염두에 두고 설계되었습니다. 다음 표는 MySQL에서 제공되는 일부 스토리지 엔진에 대한 개요를 제공하며, 표 다음에 설명을 덧붙입니다.
Table 18.1 Storage Engines Feature Summary
| Feature | MyISAM | Memory | InnoDB | Archive | NDB |
|---|---|---|---|---|---|
| B-tree indexes | Yes | Yes | Yes | No | No |
| Backup/point-in-time recovery (note 1) | Yes | Yes | Yes | Yes | Yes |
| Cluster database support | No | No | No | No | Yes |
| Clustered indexes | No | No | Yes | No | No |
| Compressed data | Yes (note 2) | No | Yes | Yes | No |
| Data caches | No | N/A | Yes | No | Yes |
| Encrypted data | Yes (note 3) | Yes (note 3) | Yes (note 4) | Yes (note 3) | Yes (note 5) |
| Foreign key support | No | No | Yes | No | Yes |
| Full-text search indexes | Yes | No | Yes (note 6) | No | No |
| Geospatial data type support | Yes | No | Yes | Yes | Yes |
| Geospatial indexing support | Yes | No | Yes (note 7) | No | No |
| Hash indexes | No | Yes | No (note 8) | No | Yes |
| Index caches | Yes | N/A | Yes | No | Yes |
| Locking granularity | Table | Table | Row | Row | Row |
| MVCC | No | No | Yes | No | No |
| Replication support (note 1) | Yes | Limited (note 9) | Yes | Yes | Yes |
| Storage limits | 256TB | RAM | 64TB | None | 384EB |
| T-tree indexes | No | No | No | No | Yes |
| Transactions | No | No | Yes | No | Yes |
| Update statistics for data dictionary | Yes | Yes | Yes | Yes | Yes |
| Feature | MyISAM | Memory | InnoDB | Archive | NDB |
|---|
Notes:
1. 스토리지 엔진이 아닌 서버에 구현되어 있습니다.
2. 압축된 MyISAM 테이블은 압축된 행 포맷을 사용할 때만 지원됩니다. MyISAM에서 압축된 행 포맷을 사용하는 테이블은 읽기 전용입니다.
3. 암호화 함수에 의한 서버 구현입니다.
4. 암호화 함수에 의한 서버 구현입니다. MySQL 5.7 이후 버전에서는 저장 데이터 암호화(data-at-rest encryption)가 지원됩니다.
5. 암호화 함수에 의한 서버 구현입니다. NDB 8.0.22부터는 암호화된 NDB 백업이 지원되며, NDB 8.0.29 이후 버전에서는 투명한 NDB 파일 시스템 암호화가 지원됩니다.
6. FULLTEXT 인덱스 지원은 MySQL 5.6 이후 버전에서 사용할 수 있습니다.
7. 지리공간 인덱싱 지원은 MySQL 5.7 이후 버전에서 사용할 수 있습니다.
8. InnoDB는 어댑티브 해시 인덱스 기능을 위해 내부적으로 해시 인덱스를 활용합니다.
9. 이 섹션의 후반부에 이어지는 설명을 참조하십시오.
17.22 InnoDB Restrictions and Limitations
18.1 Setting the Storage Engine