본문 바로가기
스터디/Real MariaDB

06.스토리지 엔진 - Aria 스토리지 엔진

by 취미툰 2021. 7. 22.
반응형

6.1 Aria 스토리지 엔진

MyISAM 스토리지 엔진은 초창기부터 사용이 되어 왔습니다. 하지만 트랜잭션을 지원하지 않고 테이블 수준의 잠금을 사용한다는 단점이 있어서 주로 사용하지는 않게 되었습니다.

Aria 스토리지 엔진은 MyISAM의 이런 단점을 보완하기 위해서 만들어진 스토리지 엔진입니다. MariaDB에서는 내부 임시 테이블을 생성해야 할 때에는 MyISAM이 아니라 Aria 스토리지 엔진을 사용하기 때문에 Aria 스토리지 엔진의 기본적인 내용을 알고 있다면 도움이 될 것입니다.

MyISAM과 차별화되는 기능은 트랜잭션과 페이지 캐시기능입니다.

 

6.1.1 트랜잭션

Aria 스토리지 엔진을 사용하는 테이블을 생성할 때에는 TRANSACTIONAL 옵션을 명시할 수 있습니다. TRANSACTIONAL 옵션은 Aria스토리지 엔진 테이블을 생성할 때에만 사용할 수 있습니다.

 

MariaDB [employees]> CREATE TABLE tb_aria1 (
    -> fd1 int not null,
    -> fd2 varchar(10) not null,
    -> primary key(fd1)) engine=Aria transactional=1;

위와 같이 트랜잭션 지원을 활성화한 상태로 Aria스토리지 엔진 테이블을 생성하면 이 테이블에 대해서는 트랜잭션이 지원됩니다. TRANSACTIONAL 옵션이 1로 설정되면, 이 테이블의 모든 변경 내용은 InnoDB나 XtraDB스토리지 엔진과 같이 먼저 리두 로그 파일에 기록되고 실제 데이터 변경내용은 지연되어서 처리됩니다. 완벽한 트랜잭션 지원은 2.0버전에서야 추가될 예정(MariaDB 10.0에서 사용하는 버전은 1.5)입니다.

MyISAM 스토리지 엔진을 사용해본 경험이 있다면 테이블이 자주 깨어지는 현상을 경험해보았을 수도 있습니다. 이는 별도의 로그를 이용한 자동 복구 기능이 없기 때문인데, Aria스토리지 엔진을 TRANSACTIONAL 옵션과 함께 생성하면 리두 로그를 이용해서 비정상적으로 MariaDB서버가 종료되었다가 재시작 될때에는 자동 복구 기능을 수행합니다. 즉 트랜잭션기능보다는 테이블이 손상되지 않도록 보호해 주는 역할로 사용되고 있습니다.

 

6.1.2 페이지 캐시

Aria 스토리지 엔진의 가장 큰 장점이라고 할 수 있는 페이지 캐시기능입니다. MyISAM 스토리지 엔진은 key_buffer_size 시스템 설정으로 별도의 캐시를 사용할 수 있는데, 이 메모리 버퍼는 인덱스만 캐시할 수 있습니다. 하지만 Aria스토리지 엔진은 MyISAM스토리지 엔진과는 달리 인덱스 뿐아니라 테이블의 데이터 페이지까지 모두 메모리 공간에 캐시할 수 있습니다. ROW_FORMAT옵션을 page로 설정한 테이블은 데이터 파일의 내용까지 모두 메모리 버퍼에 캐시할 수 있습니다.

 

MariaDB [employees]> CREATE TABLE tb_aria2 (
    -> fd1 int not null,
    -> fd2 varchar(10) not null,
    -> primary key(fd1)
    -> ) engine=Aria ROW_FORMAT=page;
Query OK, 0 rows affected (0.060 sec)

Aria 스토리지 엔진이 캐시를 위해서 사용할 수 있는 메모리 공간은 aria_pagecache_buffer_size 시스템 설정으로 크기를 조정할 수 있으며, 기본값은 128MB입니다. 별도로 Aria스토리지 엔진을 사용하지 않는다 하더라도 MariaDB서버는 사용자의 쿼리를 처리하기 위해서 내부 임시 테이블로 Aria 스토리지 엔진을 사용합니다. 그래서 최소한 64MB ~ 128MB정보의 페이지 캐시 공간은 설정해 두는 것이 좋습니다.

만약 Aria 스토리지 엔진을 사용하는 테이블을 생성하면서 ROW_FORMAT을 fixed로 설정한다면 Aria 스토리지 엔진은 MyISAM스토리지 엔진과 비슷하게 작동할 것입니다. 즉 페이지 캐시에는 인덱스만 캐시되고 데이터 파일의 내용은 운영체제의 캐시에 의존하게 되는 것입니다.

 

6.1.3 시스템 변수

Aria 스토리지 엔진도 별도의 설정을 가지고 있습니다. 그중 몇가지만 정리하였습니다.

aria_pagecache_buffer_size

Aria 스토리지 엔진을 사용하는 테이블의 인덱스나 데이터 페이지를 캐시할 수 있는 메모리 공간의 크기를 설정

aria_sort_buffer_size
aria 스토리지 엔진을 사용하는 테이블을 생성하거나 인덱스를 추가할 때 그리고 REPAIR 명령으로 Aria스토리지 엔진을 사용하는 테이블을 복구할 때에 정렬작업이 필요합니다. 이때 이 파라미터에 적용된 크기만큼 메모리를 할당해서 사용합니다. 주의해야할 것은 일반적은 GROUP  BY 나 ORDER BY를 처리하기 위한 정렬은 aria_sort_buffer_size로 할당된 메모리 공간을 사용하지 않고 sort_buffer_size 시스템 변수의 설정만큼 할당된 메모리 공간을 사용합니다.

aria_group_commit,aria_group_commit_interval
TRANSACTIONAL 옵션이 1이나 yes로 생성된 Aria테이블은 모든 변경 내역이 커밋될 때 로그(WAL로그)에 먼저 기록하는데 이때 동시에 커밋되는 트랜잭션들의 로그를 모아서 기록할 수 있습니다.앞에파라미터는 Aria스토리지 엔진이 그룹 커밋을 사용할 지, 뒤의 파라미터는 얼마나 자주 모아서 디스크에 기록을 하지 결정합니다. aria_group_commit_interval은 마이크로 초(1/1000000초) 단위로 설정하면 됩니다.

aria_block_size

Aira스토리지 엔진을 사용하는 테이블에 대해서 블록 크기를 정하는 파라미터. 기본적으로 8K로 설정됨

aria_used_for_temp_tables

MariaDB 서버가 사용자의 쿼리를 처리하는 동안 내부적으로 임시 테이블이 필요한 경우 MyISAM 스토리지 엔진 대신 Aria 스토리지 엔진을 사용하는 파라미터.

 

 

mariadb 10.6 기준 aria 관련 시스템 설정 변수

MariaDB [employees]> show variables like '%aria%';
+------------------------------------------+------------------------------------------------------------------------------------------+
| Variable_name                            | Value                                                                                    |
+------------------------------------------+------------------------------------------------------------------------------------------+
| aria_block_size                          | 8192                                                                                     |
| aria_checkpoint_interval                 | 30                                                                                       |
| aria_checkpoint_log_activity             | 1048576                                                                                  |
| aria_encrypt_tables                      | OFF                                                                                      |
| aria_force_start_after_recovery_failures | 0                                                                                        |
| aria_group_commit                        | none                                                                                     |
| aria_group_commit_interval               | 0                                                                                        |
| aria_log_file_size                       | 1073741824                                                                               |
| aria_log_purge_type                      | immediate                                                                                |
| aria_max_sort_file_size                  | 9223372036853727232                                                                      |
| aria_page_checksum                       | ON                                                                                       |
| aria_pagecache_age_threshold             | 300                                                                                      |
| aria_pagecache_buffer_size               | 134217728                                                                                |
| aria_pagecache_division_limit            | 100                                                                                      |
| aria_pagecache_file_hash_size            | 512                                                                                      |
| aria_recover_options                     | BACKUP,QUICK                                                                             |
| aria_repair_threads                      | 1                                                                                        |
| aria_sort_buffer_size                    | 268434432                                                                                |
| aria_stats_method                        | nulls_unequal                                                                            |
| aria_sync_log_dir                        | NEWFILE                                                                                  |
| aria_used_for_temp_tables                | ON                                                                                       |
| session_track_system_variables           | autocommit,character_set_client,character_set_connection,character_set_results,time_zone |
+------------------------------------------+------------------------------------------------------------------------------------------+
22 rows in set (0.001 sec)

 

 

반응형

'스터디 > Real MariaDB' 카테고리의 다른 글

06.스토리지 엔진 - InnoDB 스토리지 엔진  (0) 2021.07.23
4.4 옵티마이저 힌트  (0) 2021.06.14
4.3.10 Extra컬럼(2)  (0) 2021.06.04
4.3.10 Extra 컬럼(1)  (0) 2021.06.03
04.3 실행 계획 분석  (0) 2021.06.02

댓글