들어가며
MariaDB는 전세계에서 많이 사용하는 오픈소스 RDBMS 중 하나이다. 2010년 1월, 5.1버전을 시작으로 꾸준한 업그레이드를 거쳐 2021년 12월 현재 안정화 버전으로 10.6이, Alpha(미리보기) 버전으로 10.7이 배포되고 있다. 개발은 MariaDB 재단이 맡고 있으며 약 1년 주기로 신규 버전을 발표한다. 제품 개발은 Alpha → Beta → RC(Release Candidate, 릴리즈 후보) 단계를 거쳐 정식 버전이 출시된다. 버전별로 EoL(End of Life)이 정해져 있으며 모든 릴리스가 최소 5년 동안 유지되도록 보장한다. EoL 이후에는 버그나 보안 패치가 제공되지 않는다.
MariaDB 10.6 버전은 비정상 종료시 안전한 Atomic DDL, OARCLE 호환성에 중점을 둔 구문과 데이터 처리에 사용하는 SQL 구문 그리고 데이터베이스 사용에 도움이 되는 Sys Schema까지 활용도가 높은 기능이 대거 추가되었다. 본 아티클에서는 10.6 버전의 주요한 개선 및 추가·삭제 사항을 살펴보고자 한다.
개선 및 변경 사항
1. Atomic DDL
DDL(Data Definition Language) 작업 중 서버가 비정상 종료될 경우 이전 버전에서는 작업에 대한 안전 보장이 없었다. 10.6 버전부터는 CREATE TABLE, ALTER TABLE, RENAME TABLE, DROP TABLE, DROP DATABASE 및 관련 DDL 문은 비정상 종료에 안전하도록 개선되었다. MariaDB의 Atomic DDL은 비정상 종료하면 DDL문이 완전히 실행되거나 전혀 수행되지 않는다. 이는 비정상 종료가 발생하여 서버를 다시 시작하더라도 모든 테이블이 일관되고 바이너리 로그가 서버의 상태와 일치함을 뜻한다.
또한 Atomic DDL은 데이터베이스 계층에서 구현되어 MariaDB의 다양한 스토리지 엔진과 함께 작동 가능하다. 추후에는 S3 storage engine, partitioning engine도 지원할 예정이다.
2. INNODB
row_format=COMPRESSED 형식의 테이블은 기본적으로 읽기 전용으로만 사용이 가능하다. 향후 쓰기 지원을 제거하고 더 이상 사용하지 않을 예정이다. 하지만 변수 innodb_read_only_compressed=OFF를 사용하면 쓰기가 가능하다.
InnoDB 임시 테이블 스페이스의 쓰기는 피해야 한다. 페이지가 버퍼 풀(Buffer pool)에서 제거되고 재사용 되지 않는 한 쓰기는 사용하지 않아야 성능에 좋다.
InnoDB Bulk Insert시 속도를 최적화한다. 트랜잭션이 커밋(Commit) 또는 롤백(Rollback) 상태이거나 INSERT 작업에 영향을 주는 롤백일 때 유지될 exclusive table lock으로 빈 테이블 또는 파티션에 대한 삽입을 커버하여 Insert시 빠른 속도로 처리가 가능하다.
3. 사용하지 못하는 변수
갈레라 클러스터(Galera Cluster) 관련 변수중 다음 변수는 사용하지 않고 wsrep_mode로 대체하여 사용한다.
4. 문자셋(Character Sets) 변경
문자셋이 utf8에서 utf8m3으로 변경되었다. 3바이트 문자 집합의 기본 이름이 utf8에서 utf8m3으로 바뀐다. 모든 SHOW 및 INFORMATION_SCHEMA 출력은 utf8이 아닌 utf8mb3로 표시된다.
5. 시스템 변수 기본값 변경
메모리의 버퍼 풀과 OS캐시에 중복 저장되는 더블 버퍼링을 막아 메모리를 효율적으로 사용할 수 있는 O_DIRECT를 기본값으로 채택하였다.
추가 사항
1. 추가된 변수
2. 예약어 추가
예약어에 OFFSET이 추가되었고 인용부호(쌍따옴표)가 없으면 식별자로 사용할 수 없다. 10.6버전부터는 INFORMATION_SCHEMA.KEYWORDS를 통해 예약어를 확인할 수 있다.
3. SQL 구문
10.6 버전부터 제공하는 SQL 구문은 다음과 같다.
4. ORACLE 호환
ORACLE 호환을 위해 다음과 같은 함수 및 기능이 추가되었다.
5. Sys Schema
데이터베이스 관리자에게 도움이 되는 view·Function·procedures의 모음이다. 테이블에는 구성을 Insert 또는 Update 하는 사용자를 유지관리하는 두 개의 트리거가 있다. (sys_config_insert_set_user 및 sys_config_update_set_user) performance_schema=ON 일때 사용이 가능하며 구조는 다음과 같다.
삭제 사항
1. 제거된 변수
Innodb 관련 변수가 제거되었다. 예를 들면 innodb_thread_concurrency 변수는 예전에 컴퓨팅 리소스가 제한적일 때 유용하게 사용하였지만 현재 이 값을 무제한(0)보다 작게 설정하는 것이 의미가 없으며 쿼리가 InnoDB 외부에서 기다려야 하기 때문에 실제로 상황을 더 악화시킬 수 있어 해당 변수를 제거하였다.
2. INNODB
Information_schema.INNODB_SYS_TABLESPACE 파일시스템에 직접 반영하고 관리되었던 Information_schema.innodb_sys_datafiles은 제거되었다.
이전 MariaDB 5.5 호환 innodb checksum은 더 이상 지원되지 않으며 crc32만 지원한다. innodb_checksum_algorithm에서 *innodb 및 *none 옵션을 제거하였다. Innochecksum에서 –strict-check/-C 및 –write/-w 옵션을 제거하였다.
3. 스토리지 엔진
토쿠DB(TokuDB) 엔진과 카산드라(Cassandra) 엔진이 제거되었다. 토쿠DB 엔진은 10.6에서 제거 되었고 장기 마이그레이션 경로로 10.2.5부터 제공된 MyRocks 엔진을 추천한다. 카산드라 엔진은 사용이 적고 개발이 중단되어 제거되었다.
마치며
MariaDB는 단기간에 괄목한 만한 성장세를 보이면서 대표적인 오픈소스 DB로 손꼽히고 있다.
10.6버전은 이전 버전보다 최적화, 호환성, 안정성, 편리성을 고려한 개선 사항이 추가되었으며 불필요한 변수를 삭제하였다. 다만 10.6 버전으로 업그레이드할 경우 제거되거나 사용되지 않는 변수를 my.cnf에서 확인해야 하며 변수를 추가할 때는 사전에 충분한 검토가 필요하다는 점을 유념해야 한다.
본 아티클이 버전 업그레이드를 고민하는 DB 관리자에게 도움이 되기를 바란다.
# References
- https://mariadb.com/kb/en/upgrading-from-mariadb-105-to-mariadb-106/
- https://mariadb.com/kb/en/changes-improvements-in-mariadb-106/
- https://mariadb.com/kb/en/mariadb-1060-release-notes/
- https://jira.mariadb.org/browse/MDEV-23497
- https://ko.wikipedia.org/wiki/MariaDB
- https://endoflife.date/mariadb
- https://www.slideshare.net/MyDBOPS/what-isnewinmaria-db106
임호현 프로
에스코어㈜ 소프트웨어사업부 오픈소스SW그룹
오픈소스 DB 기술 서비스를 담당하고 있습니다.
Register for Download Contents
- 이메일 주소를 제출해 주시면 콘텐츠를 다운로드 받을 수 있으며, 자동으로 뉴스레터 신청 서비스에 가입됩니다.
- 뉴스레터 서비스 가입 거부 시 콘텐츠 다운로드 서비스가 제한될 수 있습니다.
- 파일 다운로드가 되지 않을 경우 s-core_mktg@samsung.com으로 문의해주십시오.