/ Dev

TokuDB에서의 테이블 압축

TokuDB는 여러 다른 레벨의 압축을 지원합니다. 이 압축 레벨들은 CPU 사용률과 실제 데이터의 압축률에 관계 있습니다. 성능에도 관계가 있죠. 표준 압축은 CPU를 적게 쓰는 대신 낮은 압축률을, 높은 압축률은 CPU를 더 많이 씁니다. TokuDB는 25배 이상 압축이 된 고객사까지 경험했다고 합니다. (공식 문서)

압축은 백그라운드 쓰레드에서 하므로 압축률을 높힌다고 DB가 느려지진 않는다고 합니다. 그것보단, 압축률을 높히면 전체적인 DB 성능이 올라간다고 합니다. 왜 그런지는 잘 모르겠습니다만, TokuDB 공식 문서에서는 7코어 이상의 시스템에서 표준 압축을 쓰고 있다면 높은 압축률로 바꾸기를 강추하고 있습니다. 물론 제일 좋은 방안은 DB를 어떻게 사용/관리하고 있냐에 따라 설정을 하고, 시스템에 따라서 높은 압축률을 쓰는 것인데, 아무튼간에 좋은 시스템일 경우 압축률을 높게 바꾸라고 하는걸 보니 좋긴 좋은가봅니다.

압축 옵션은 테이블마다 설정을 할 수 있으며 create_table 이나 alter_table 구문을 사용 할 때 row_format 세팅 값으로 설정이 가능합니다. 아래와 같이 사용할 수 있습니다.

create table t1 (c1 int not null primary key, c2 int not null) engine=tokudb row format=<row format>

기본적으로 row_format 을 지정하지 않으면 tokudb_row_format이라는 세션 변수에 등록된 값으로 테이블을 생성하게 됩니다. 직접 자신의 시스템에 적용되고 있던 row_format 을 보고 싶으면 아래와 같은 쿼리를 해보면 됩니다.

select @@session.tokudb_row_format

이 옵션은 아래와 같은 값들로 설정이 가능합니다.

  • tokudb_default: 아무 설정을 하지 않았을 경우 이 값입니다. TokuDB 7.0.1 에서는 이 값이 tokudb_fast 옵션과 같다고 보면 됩니다.
  • tokudb_fast: quicklz 압축 알고리즘을 사용하는 옵션입니다. TokuTek 에서는 이 값을 standard compressor으로 명명하고 있습니다.
  • tokudb_small: lzma 압축 알고리즘을 사용하는 옵션입니다. TokuTek 에서는 이 값을 aggressive compressor으로 명명하고 있습니다.

아래는 압축 알고리즘들입니다. 유저는 위 옵션과는 별개로 직접 알고리즘 자체를 선택을 할 수도 있으며, 아래의 값을 그냥 tokudb_default 라는 값 대신 설정을 하면 됩니다.

  • tokudb_quicklz: 위 옵션에서 볼 수 있다시피 기본 압축이죠. TokuDB 5.2 버전에서부터 사용 되었습니다.
  • tokudb_lzma: aggressive compressor 알고리즘입니다.
  • tokudb_zlib: TokuDB 5.0 부터 사용된 압축 알고리즘으로써 Deprecated 된 상태입니다.
  • tokudb_uncompressed: 압축을 끄는 옵션입니다. (This may be useful on tables with uncompressable data.)

테이블 압축 변경하기

alter table <table-name> row_format=<row-format>

압축 옵션을 변경하고나서는 새로 기록된 데이터에 대해서만 압축이 적용 됩니다. 변경 이후에 테이블 전체에 이 압축을 적용하고 싶으면 optimize table <table-name> 을 이용해서 optimize 하여 모든 테이블 블록들을 rewrite 해줘야합니다.