클라우드 데이터베이스의 선두 MariaDB, 10.6 무엇이 바뀌었나?

클라우드 데이터베이스의 선두 MariaDB,10.6 무엇이 바뀌었나?

들어가며

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 이후에는 버그나 보안 패치가 제공되지 않는다.

[표 1] MariaDB 버전별 EoL
Version Released Support Status Release
10.6 2021/07/06 2026/07/06 10.6.5
10.5 2020/06/24 2025/06/24 10.5.13
10.4 2019/06/18 2024/06/18 10.4.22
10.3 2018/05/25 2023/05/25 10.3.32
10.2 2017/05/23 2022/05/23 10.2.41
10.1 2015/10/17 2020/10/17 10.1.48
10.0 2014/03/31 2019/03/31 10.0.38
[표 1] MariaDB 버전별 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로 대체하여 사용한다.

사용하지 못하는 변수
Option Reason
wsrep_replicate_myisam wsrep_mode 값 중 REPLICATE_MYISAM 선택하여 사용 가능
wsrep_strict_ddl 2wsrep_mode 값 중 STRICT_REPLICATION 선택하여 사용 가능

4. 문자셋(Character Sets) 변경

문자셋이 utf8에서 utf8m3으로 변경되었다. 3바이트 문자 집합의 기본 이름이 utf8에서 utf8m3으로 바뀐다. 모든 SHOW 및 INFORMATION_SCHEMA 출력은 utf8이 아닌 utf8mb3로 표시된다.

문자셋(Character Sets) 변경
Option Old default value New default value
character_set_client utf8 utf8mb3
character_set_connection utf8 utf8mb3
character_set_results utf8 utf8mb3
character_set_system utf8 utf8mb3

5. 시스템 변수 기본값 변경

메모리의 버퍼 풀과 OS캐시에 중복 저장되는 더블 버퍼링을 막아 메모리를 효율적으로 사용할 수 있는 O_DIRECT를 기본값으로 채택하였다.

시스템 변수 기본값 변경
Option Old default value New default value
innodb_flush_method fsync O_DIRECT

추가 사항

1. 추가된 변수

추가된 변수
Variable Explanation
binlog_expire_logs_seconds - 0이 아닌 경우 바이너리 로그를 값(초) 후에 로그 파일을 제거한다. expire_logs_days는 하나를 변경하면 다른 하나가 자동으로 변경되는 별칭의 형태이다.
innodb_deadlock_report - ON: deadlock상태를 보고하는 방법이다.
- Off: deadlock 상세정보를 보고하지 않는다.
- Basic: 트랜잭션 및 대기 잠금을 보고한다.
- Full: 기본값으로 트랜잭션, 대기 잠금 및 차단 잠금을 보고한다.
innodb_read_only_compressed - ON일 경우 ROW_FORMAT=COMPRESSED 테이블은 읽기 전용이며, OFF시에는 쓰기를 허용한다.
wsrep_mode wsrep 기능을 사용한다.
(INLOG_ROW_FORMAT_ONLY, DISALLOW_LOCAL_GTID, REQUIRED_PRIMARY_KEY, REPLICATE_ARIA, REPLICATE_MYISAM and STRICT_REPLICATION)
Innodb_buffer_pool_pages_lru_freed 플러시하지 않고 버퍼 풀 LRU 축출 스캔에 의해 해제된 페이지 수를 모니터링한다.

2. 예약어 추가

예약어에 OFFSET이 추가되었고 인용부호(쌍따옴표)가 없으면 식별자로 사용할 수 없다. 10.6버전부터는 INFORMATION_SCHEMA.KEYWORDS를 통해 예약어를 확인할 수 있다.

3. SQL 구문

10.6 버전부터 제공하는 SQL 구문은 다음과 같다.
• Select…Skip Locked 구문은 lock이 걸린 행은 결과에서 제외된다. InnoDB 테이블에서만 구현이 가능하다.

SELECT [FOR UPDATE|LOCK IN SHARED MODE] SKIP LOCKED

• Select…Offset Fetch 구문은 Offset절을 사용하면 지정된 Offset 뒤에 오는 결과 집합만 조회가 가능하다. Fetch절은 반환할 행의 수를 지정한다.

OFFSET start { ROW | ROWS }
FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } { ONLY | WITH TIES }

• INDEX IGNORED는 표시되고 유지되지만 옵티마이저에서 사용되지 않는 인덱스로 Mysql 8의 invisible indexes와 유사한 기능이다. 해당 인덱스는 인덱스 제거 여부를 고려할 때 Ignore 처리하여 DB 영향 및 문제가 발생하는 것을 확인할 수 있어 인덱스를 안전하게 삭제할 수 있다. 인덱스 Ignore 여부는 information_schema.statistics Table과 Show INDEX에서 확인하면 된다.

IGNORE INDEX [{FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])

• JSON_TABLE 구문을 사용할 수 있다. JSON Path 표현식을 기반으로 JSON 데이터를 추출하고 이를 관계형 테이블로 반환하는데 사용하는 구문으로 Select문의 from절 및 다중 테이블 Updata·Delete문에서 테이블을 참조하여 사용한다.

4. ORACLE 호환

ORACLE 호환을 위해 다음과 같은 함수 및 기능이 추가되었다.
• ADD_MONTHS(): 날짜에 월을 빼거나 더하는 함수이다.
 ADD_MONTHS(date, interval N months)
• TO_CHAR(): DATE, DATETIME, TIME or TIMESTAMP 데이터 타입을 문자열로 변환한다.
 TO_CHAR(expr, format)
• SYS_GUID(): 문자가 없는 16바이트 GUID 반환한다.
• ROWNUM: 허용되는 현재 행 수를 반환한다. 사용할 수 있는 구문은 SELECT, INSERT, UPDATE, DELETE, LOAD DATA INFILE 에서만 사용이 가능하다.
 ROWNUM()
• sql_mode=oracle 일때 FROM절(as절 없음)에 익명의 서브쿼리가 허용된다.

MariaDB Version 10.5.12
MariaDB [test]> SELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' (SELECT 2 FROM DUAL)' at line 1

MariaDB Version 10.6.5
MariaDB [test]> SET global sql_mode = 'oracle';
Query OK, 0 rows affected (0.000 sec)
MariaDB [test]> SELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
+---+---+

5. Sys Schema

데이터베이스 관리자에게 도움이 되는 view·Function·procedures의 모음이다. 테이블에는 구성을 Insert 또는 Update 하는 사용자를 유지관리하는 두 개의 트리거가 있다. (sys_config_insert_set_user 및 sys_config_update_set_user) performance_schema=ON 일때 사용이 가능하며 구조는 다음과 같다.

MariaDB [sys]> desc sys_config;
+----------+--------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------------------+-------------------------------+
| variable | varchar(128) | NO | PRI | NULL | |
| value | varchar(128) | YES | | NULL | |
| set_time | timestamp | NO | | current_timestamp() | on update current_timestamp() |
| set_by | varchar(128) | YES | | NULL | |
+----------+--------------+------+-----+---------------------+-------------------------------+

삭제 사항

1. 제거된 변수

Innodb 관련 변수가 제거되었다. 예를 들면 innodb_thread_concurrency 변수는 예전에 컴퓨팅 리소스가 제한적일 때 유용하게 사용하였지만 현재 이 값을 무제한(0)보다 작게 설정하는 것이 의미가 없으며 쿼리가 InnoDB 외부에서 기다려야 하기 때문에 실제로 상황을 더 악화시킬 수 있어 해당 변수를 제거하였다.

Option
Variable
innodb_adaptive_max_sleep_delay
innodb_background_scrub_data_check_interval
innodb_background_scrub_data_compressed
innodb_background_scrub_data_interval
innodb_background_scrub_data_uncompressed
innodb_buffer_pool_instances
innodb_checksum_algorithm
innodb_commit_concurrency
innodb_concurrency_tickets
innodb_file_format
innodb_large_prefix
innodb_lock_schedule_algorithm
innodb_log_checksums
innodb_log_compressed_pages
innodb_log_files_in_group
innodb_log_optimize_ddl
innodb_page_cleaners
innodb_replication_delay
innodb_scrub_log
innodb_scrub_log_speed
innodb_sync_array_size
innodb_thread_concurrency
innodb_thread_sleep_delay
innodb_undo_logs

2. INNODB

Information_schema.INNODB_SYS_TABLESPACE 파일시스템에 직접 반영하고 관리되었던 Information_schema.innodb_sys_datafiles은 제거되었다.

MariaDB [test]> SELECT * FROM information_schema.INNODB_SYS_TABLESPACES \G;
*************************** 1. Row ***************************
         SPACE: 0
          NAME: innodb_system
          FLAG: 21
    ROW_FORMAT: NULL
     PAGE_SIZE: 16384
      FILENAME: ./ibdata1
 FS_BLOCK_SIZE: 4096
     FILE_SIZE: 12582912

이전 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
[1] https://mariadb.com/kb/en/upgrading-from-mariadb-105-to-mariadb-106/
[2] https://mariadb.com/kb/en/changes-improvements-in-mariadb-106/
[3] https://mariadb.com/kb/en/mariadb-1060-release-notes/
[4] https://jira.mariadb.org/browse/MDEV-23497
[5] https://ko.wikipedia.org/wiki/MariaDB
[6] https://endoflife.date/mariadb
[7] https://www.slideshare.net/MyDBOPS/what-isnewinmaria-db106



▶ 해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶ 해당 콘텐츠는 사전 동의 없이 2차 가공 및 영리적인 이용을 금하고 있습니다.


공유하기 열기
임호현
임호현 인공지능/애널리틱스 전문가

에스코어(주) 소프트웨어사업부 오픈소스SW그룹

오프소스 DB의 기술지원을 담당하고 있습니다.