단의 개발 블로그
Maria DB란 본문
MariaDB란?
MariaDB는 RDBMS의 한 종류다. Mysql의 커뮤니티의 버전을 기반으로 만들어졌다. 하지만 커뮤니티 버전을 그대로 사용하는 것이 아닌 해당 버전이 가지고 있는 기능과 새로운 기능이 더해져 출시되는 RDBMS이다. 그렇기 때문에 Mysql과 상당 부분 호환해서 사용 가능하다. 또한 오픈 소스로 만들어졌다. 따라서 본인이 원하는 기능을 무료로 사용 가능하고, 해당 기능이 어떻게 구현되어 있는지 살펴볼 수 있다.
MySQL과 비교하며 알아보자.
Mysql과의 호환성
MariaDB는 Mysql과 호환성이 뛰어나다. 실행 프로그램들과 유틸리티 모두 MySQL과 이름이 동일하다. 데이터 파일과 테이블 정의 파일모두 버전에 맞게 호환이 가능하다. 그 외에도 클라이언트 API와 통신 프로토콜, 복제 관련 데이터파일, 소켓파일 및 파일 경로가 동일, MySQL Connector 변경 없이 사용 가능, MySQL 클라이언트 프로그램은 그대로 MariaDB 서버에 연결하여 사용이 가능하다.
프로그램과 유틸리티 비교 표
| Maria DB | MySQL | |
| 데이터베이스 서버 프로그램 | mysqld | mysqld |
| MyISAM 체크 프로그램 | myisamchk | myisamchk |
| 클라이언트 프로그램 | mysql | mysql |
| 서버 관리자 유틸리티 | mysqladmin | mysqladmin |
| 데이터 덤프 프로그램 | mysqldump | mysqldump |
| 데이터 적재 프로그램 | mysqlimport | mysqlimport |
| 빌트인 백업 유틸리티 | mysqlhotcopy | mysqlhotcopy |
| 스키마 업그레이드 유틸리티 | mysql_upgrade | mysql_upgrade |
| 바이너리 로그 분석 프로그램 | mysqlbinlog | mysqlbinlog |
| 데이터 베이스 구조 분석 유틸리티 | mysqlshow | mysqlshow |
| 슬로우 쿼리 로그 분석 프로그램 | mysqldumpslow | mysqldumpslow |
차이점
라이선스
오픈소스 정책 방향이나 소프트웨어 라이선스 정책이 가장 큰 차이점이다. MariaDB 서버는 GPL 라이선스로 배포되고 클라이언트 프로그램 및 라이브러리는 LGPL 라이선스를 따른다. MySQL 커뮤니티의 서버와 클라이언트 프로그램 및 라이브러리는 모두 GPL라이선스로 배포되고, 엔터프라이즈 버전은 상용 라이선스를 따른다.
스토리지 엔진
기능적인 차이는 스토리지 엔진이다. 차이점은 아래와 같다.
| 용도 | MariaDB | MySQL |
| 기본 메모리 스토리지 엔진 | MySQL 베이스인 MEMORY 스토리지 엔진을 기본 스토리지 엔진으로 사용 VARCHAR 가변 데이터 타입에 대한 지원이 가능하도록 개선, 내부 임시 테이블에 해당 타입 컬럼의 길이가 2000이라면 실제 저장된 메모리 만큼 소비 된다고 함 |
MariaDB 메모리 스토리지 엔진과 거의 동일 |
| 디스크 기반 내부 임시 테이블 스토리지 엔진 | 기본적으로 Aria 스토리지 엔진이 내부 임시 테이블용 스토리지 엔진으로 사용 Aria 스토리지 엔진은 InnoDB와 비슷하게 인덱스 뿐만 아니라 레코드 데이터까지 모두 메모리 캐시를 이용하여 MyISAM에 비해서 빠른 처리 보장 aria_used_for_temp_tables 옵션으로 조정 가능 |
MySQL 서버가 내부 임시 테이블이 필요한 작업에서는 MyISAM 스토리지 엔진을 사용하는 테이블을 생성하여 작업을 처리 |
| 트랜잭션 지원 스토리지 엔진 | MariaDB의 트랜잭션 지원 스토리지 엔진으로 InnoDB 대신 XtraDB가 사용됨 10.0.7 버전 이후 부터는 XtraDB 대신 InnoDB가 기본으로 사용됨 |
InnoDB가 기본 스토리지 엔진으로 사용되고, 트랜잭션 용도의 스토리지 엔진으로 사용됨. |
| NoSQL 지원 스토리지 엔진 | 10.0버전 이후부터 Cassandra 와 연결해서 MariaDB 서버를 통해 접근이 가능해짐 | InnoDB의 데이터를 Memcached API를 이용해서 데이터를 접근할 수 있도록 플러그인이 제공됨 |
기능
| 기능명 | MariaDB | MySQL |
| 스레드 풀 | 5.1버전 부터 지원 | 5.5버전이상 엔터프라이즈에서 지원 |
| 버퍼 풀 프리로드 | 5.5버전에 포함된 XtraDB에서 버퍼 풀의 내용을 덤프하고, 덤프된 버퍼 풀 정보를 재시작 후 로딩할 수 있는 기능 제공 | 5.6 버전부터 버퍼 풀 덤프와 로딩 제공 |
| SSD 지원 | XtraDB에서는 SSD 기반 블록 플러시 알고리즘 지원 | |
| 서브쿼리 최적화 | 5.5 버전부터 IN이나 NOT IN 형태의 최적화를 지원 FROM 절에 사용된 서브쿼리를 외부 쿼리와 통합하는 최적화 기능 제공 |
5.6 버전부터 MariaDB와 동일 |
| 조인 최적화 | 인크리멘탈 조인 버퍼를 이용한 네스티드 루프 조인과 BKA조인 지원 해시조인 지원 |
5.6 버전에서는 해시 조인 지원 안함, 나머지는 동일 |
| 멀티 소스 레플리케이션 | 하나의 슬레이브가 2개 이상의 마스터를 가지는 형태의 레플리케이션 구현이 불가능 한 형태 였으나 10.0 부터는 이런 복제가 가능하도록 기능이 보완됨 | 5.7부터 멀티 소스 레플리케이션 기능이 추가 |
| 멀티 스레드 레플리케이션 | 10.0부터 레플리케이션 스레드 개수를 2개이상 설정 가능해졌으며, 각 스레드는 도메인 아이디 단위의 병렬 복제를 수행 | 5.6 버전부터 멀티 스레드 슬레이브가 지원되지만, 레코드 기반이 아니라 데이터베이스 단위의 멀티 쓰레딩 방식을 사용, 서버에 하나의 데이터베이스만 존재한다면 예전의 싱글 스레드 방식의 복제와 동일한 형태로 처리함 |
| 롤 기반의 권한 관리 | 10.0부터 오라클과 같이 특정 유저 그룹을 위한 역할을 생성하고 각 역할에 사용자 그룹을 만들어 사용 가능하도록 함 | |
| 마이크로 단위의 데이터 타입 | 5.3부터 밀리초와 마이크로 단위의 시간을 사용할 수 있도록 개선 | 5.6부터 MariaDB와 동일하게 사용 |
| 반 동기화 레플리케이션 | 5.5 버전부터 플러그인 형태로 설치하여 사용 | |
| 가상 컬럼 | 5.2부터 지원, 가상 컬럼은 1개 이상의 컬럼 값을 미리 별도의 컬럼에 저장하거나, 쿼리 처리 시점에 가공하여 보여줌 | |
| 동적 컬럼 | NoSQL 솔루션과 같이 각 레코드들이 가지는 컬럼이 규칙적이지 않을 때 사용할 수 있는 기능 동적 컬럼은 하나의 물리적인 컬럼으로 생성되고 물리적 컬럼을 여러 개의 논리 컬럼들을 생성하여 값을 저장하고 읽음 |
|
| PAM | 5.2 버전부터 플러그인 인증 모듈 사용 가능 | 엔터프라이즈 버전에서 사용 가능 |
옵티마이저
| 구분 | 기능 | MariaDB 5.3/5.5 |
Maria DB 10.0 ~ |
MySQL 5.5 | MySQL ~ |
| 디스크 읽기 | 멀티레인지 | O | O | O | |
| Index_merge 실행 계획의 Sort_intersection 알고리즘 추가 | O | O | |||
| 비용에 기반한 range와 index_merge 실행 계획 선정 | O | O | |||
| ORDER BY .. LIMIT | O | O | |||
| 세컨드리 인덱스 확장 | 5.5 | O | O | ||
| 조인 | 배치화된 인덱스 읽기 | O | O | O | |
| 블록 해시 조인 | O | O | |||
| 서브쿼리 | IN 쿼리 최적화 | O | O | O | O |
| 세미 조인 | O | O | O | ||
| 구체화 | O | O | O | ||
| 비용에 기반한 구체화와 In-to_Exist 최적화 | O | O | O | ||
| 서브 쿼리 캐싱 | O | O | |||
| 서브 쿼리의 실행 계획 성능 향상 | O | O | |||
| 임시 테이블 & 뷰 | 파생 테이블과 뷰의 지연된 구체화 | O | O | O | |
| 파생 테이블의 실행 계획 성능 향상 | O | O | O | ||
| 파생 테이블의 인덱스 최적화 | O | O | O | ||
| 기타 | LIMIT ROWS EXAMINED rows_limit | O | O | ||
| DELETE, INSERT, REPLACE, UPDATE 실행 계획 | 구현중 | O | |||
| 실행 계획의 JSON 포멧 출력 | O |
참고
'Database > Maria' 카테고리의 다른 글
| 서버 설정 정보 확인하기 (0) | 2024.09.02 |
|---|---|
| MariaDB 설치 및 설정 (Linux) (0) | 2024.08.28 |