Mission Completed

저장 엔진 특성 본문

selfstudy/MySQL

저장 엔진 특성

삼지안☆ 2013. 9. 9. 15:58

저장 엔진 특성

MySQL은 여러 개의 저장 엔진(흔히, 테이블 핸들러로 알고 있다)을 지원한다.
각 저장 엔진은 특수한 특성을 가지는 테이블을 만든다 아래의 표는 MySQL 배포판에서 유용한 저장 엔진을 나타내며,
이후에 개별 엔진 특성에 대해 좀 더 자세한 내용을 다루도록 한다.
MySQL 5.0과 이후 버전에서, 모든 엔진은 MySQL6.0을 필요로 하는 Falcon을 제외하고 사용 가능하다.

저장 엔진내용
ARCHIVE Archival 저장 (삽입 이후에 레코드의 변화 없음)
BLACKHOLE 값이 없으면 쓰지 않고, 비어있는 값을 읽으면 반환하는 엔진
CSV 콤마 구분 값 포멧으로 저장
EXAMPLE Example ("stub") 저장 엔진
Falcon 트랜잭션 엔진
FEDERATED 원격 테이블 접속을 위한 엔진
InnoDB 외부 키를 가지는 트랜잭션 앤진
MEMORY In-memory 테이블
MERGE MyISAM 테이블의 집합 관리
MyISAM 기본 저장 엔진
NDB MySQL 클러스터용 엔진

서버가 어떠한 저장 엔진을 사용하는지 알기 위해서 SHOW ENGINES 문을 사용한다.
이렇게 얻은 정보를 통해서 사용자는 저장 엔진이 트랜잭션을 지원하는지 알 수 있다.
필자는 InnoDB와 MyISAM 엔진의 특성만 다루도록 하겠다.

MyISAM 저장 엔진

MyISAM 저장 엔진은 서버를 따로 구성하지 않으면 MySQL의 기본 엔진을 사용한다.

  • MyISAM 포맷은 키 압축 기능을 제공한다. 이는 연속적으로 유사한 문자열 인덱스 값을 저장할 때 압축을 실행하지만,
    MyISAM은 여기에 더하여 유사한 수치 인덱스 값을 압축할 수 있는데, 수치 값들은 높은 자리 바이트가 앞쪽에 오도록 저장되기 때문이다.
    (인덱스 값은 낮은 자리 바이트에서 더욱 빠르기 때문에, 높은 자리 바이트일 경우에 더 압축할 때 효과가 좋다.)
    수치 압축을 활성화하려면, MyISAM 테이블을 만들 때 PACK_KEYS=1 옵션을 사용한다.

  • MyISAM은 다른 저장 엔진에서 사용할 수 있는 AUTO_INCREMENT 처리보다 더 기능이 많은 AUTO_INCREMENT 처리 방법을 가지고 있다.
    이에 대한 더욱 자세한 사항은 시퀀스를 가지고 작업하는 방법을 검색해 보기 바란다.

  • 개선된 테이블이 서버 또는 myisamchk 프로그램에 의해서 점검받을 때, 각 MyISAM 테이블에는 설정되는 플래그가 있다.
    MyISAM 테이블에는 또한 테이블이 적절하게 닫혔는지의 여부를 가리키는 플래그도 있다.
    만일 서버가 비정상적으로 꺼지거나 시스템이 장애를 일으켰다면, 이 플래그를 사용하여
    해당 테이블을 점검할 필요가 있는지 알아볼 수 있다.
    --myisam-recover 옵션을지정하면 서버 시작 시에 이러한 작업을 자동적으로 하고 필요하다면 테이블 수정도 한다.

  • MyISAM 핸들러는 FULLTEXT 인덱스를 통한 풀 텍스트 검색을 지원한다.

  • MyISAM 은 공간 데이터 타입과 SPATIAL 인덱스를 지원한다.

InnoDB 저장 엔진

InnoDB 저장 엔진은 원래 Innobase Oy 가 개발했지만, 결국 Oracle에 속하게 되었다. InnoDB 저장엔진은 다음과 같은 기능을 가지고 있다.

  • 커밋과 롤백 기능이 있는 트랜잭션에 안전한 테이블. 세이브 포인트는 부분 롤백을 가능하게 한다.

  • 장애 후 자동 복구

  • 연속 삭제와 갱신을 포함하는 외부 키와 참조 무결성 지원

  • 검색과 갱신 둘 다 포함하는 혼합된 쿼리 하에서 동시 수행력을 높이기 위한 저수준 잠금과 다중 버전 지원

  • InnoDB 테이블은 다른 테이블 타입들과 같이 테이블에 특정한 파일을 사용하는 것이 아니라 별도의 공유 테이블공간 안에서 관리된다.
    테이블 공간은 복수의 파일로 구설될 수도 있고 가공되지 않은 파티션을 포함할 수도 있다.
    InnoDB 저장 엔진은 사실, 테이블공간을 그 안에서 모든 InnoDB 테이블의 내용을 처리하는 가상 파일 시스템으로 다룬다.
    테이블들은 개별 파일들에 대하여 파일 시스템이 허용하는 최대 크기를 초과할 수 있다.
    테이블당 하나의 개별 테이블공간을 사용하여 InnoDB를 설정할 수 있다.
    이 경우, 각 테이블은 데이터베이스 디렉터리에 .ibd 파일을 가진다.

출처: Paul DuBois, 김형훈 역, 2009. 한국어판 MySQL 4th ed., chapter2 section6