• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 서비스
    • MySQL유지보수
    • MySQL라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.1 한글메뉴얼) [close]
  • 1. MySQL 5.1 Reference Manual
  • 2. Installing and MySQL 업그레이드하기
  • 3. 사용 설명서 (Tutorial)
  • 4. MySQL 프로그램 사용하기
  • 5. 데이터베이스 관리
  • 6. 리플리케이션
  • 7. 최적화 (Optimization)
  • 8. 클라이언트 및 유틸리티 프로그램
  • 1. 클라이언트 및 유틸리티 프로그램 개요
    2. innochecksum — 오프라인 InnoDB 체크섬 유틸리티
    3. my_print_defaults — 옵션 파일에 있는 옵션 출력하기
    4. myisam_ftdump — 풀-텍스트 (Full-Text) 인덱스 정보 출력하기
    5. myisamchk — MyISAM 테이블-관리 유틸리티
    6. myisamlog — MyISAM 로그 파일 컨텐츠 출력하기
    7. myisampack — 압축된 읽기 전용 MyISAM 테이블 만들기
    8. mysql — MySQL 명령어-라인 툴
    9. mysqlaccess — 접속 권한 검사를 위한 클라이언트
    10. mysqladmin — MySQL 서버를 관리하기 위한 클라이언트
    11. mysqlbinlog — 바이너리 로그 파일을 처리하기 위한 유틸리티
    12. mysqlcheck — 테이블 관리 및 복구 프로그램
  • 9. 언어 구조 (Language Structure)
  • 10. 문자 셋 지원
  • 24. API 및 라이브러리
  • 25. Connectors

8.7. myisampack — 압축된 읽기 전용 MyISAM 테이블 만들기

 

myisampack 유틸리티는 MyISAM 테이블을 압축한다. myisampack은 테이블에 있는 컬럼을 개별적으로 압축한다. 일반적으로, myisampack는 데이터 파일을 40%-70% 정도 압축을 한다.

 

테이블이 나중에 사용될 때에는, 서버는 압축을 해제하고자 하는 컬럼의 정보를 메모리로 읽어 온다.  

 

이렇게 하면 하나의 열만 압축을 해제해야 하기 때문에, 각각의 열에 접속을 할 때 성능이 훨씬 더 좋아진다.

 

MySQL은 압축된 테이블에 메모리 매핑이 실행 가능할 때 mmap() 를 사용한다. mmap() 이 불가능하면, MySQL은 일반적인 읽기/쓰기 동작을 실행한다.

 

주의할 사항은 다음과 같다:

  • mysqld 서버가 외부 잠금이 비활성화 된 상태로 호출된 경우, 패킹 프로세스가 진행되는 동안 서버가 테이블을 업데이트 해도 된다면, myisampack를 호출하는 것은 좋은 방법이 아니다. 서버를 종료 시킨 후에 테이블을 압축하는 것이 가장 안전하다.
  • 테이블이 압축된 후에는 읽기 전용이 된다. 이것이 일반적이다(CD에서 압축된 테이블에 접속할 때 와 같이). 압축된 테이블에 쓰기를 허용하는 것은 TODO리스트에 있지만 우선 순위는 아니다.

myisampack를 아래와 같이 호출한다:

 

shell> myisampack [option] file_name ...

 

각각의 파일 이름 인수는 인덱스 (.MYI) 파일 이름 형태이어야 한다. 데이터베이스 디렉토리 안에 있지 않으면, 그 파일에 대한 경로 이름을 지정해 주어야 한다. .MYI 확장자는 생략 가능하다.  

 

myisampack를 사용해서 테이블을 압축한 후에는, 이 테이블의 인덱스를 재 구축하기 위해서 myisamchk –rq를 사용해야 한다. Section 8.5, “myisamchk — MyISAM 테이블-관리 유틸리티” 참조할 것

 

Myisampack은 다음 옵션을 지원한다:

  • --help, -?

도움말 메시지를 표시하고 종료.

  • --backup, -b

tbl_name.OLD 이름을 사용해서 각 테이블의 데이터 파일 백업을 만든다

  • --character-sets-dir=path

문자 셋이 설치되어 있는 디렉토리 Section 5.10.1, “데이터 및 정력을 위해 사용되는 문자 셋”을 참조할 것.

  • --debug[=debug_option], -# [debug_option]

디버깅 로그 작성. debug_option 스트링은 종종 'd:t:o,file_name'이 된다.

  • --force, -f

압축된 테이블이 원본 보다 크게 되거나 또는 myisampack 의 초기 호출에서 생긴 중간 파일(intermediate file)이 존재하더라도 압축된 테이블을 생성한다. (myisampack은 테이블을 압축하는 동안에 데이터베이스 디렉토리에 tbl_name.TMD라는 이름의 중간 파일을 생성한다. myisampack를 죽이더라도, .TMD 파일은 제거되지 않는다.) 일반적인 경우, myisampack은 tbl_name.TMD 파일이 존재하는 것을 알게 되면 에러를 발생시키면서 연산을 종료하게 된다. --force를 사용하면, myisampack는 테이블을 계속 압축한다.

  • --join=big_tbl_name, -j big_tbl_name

명령어 라인에서 이름을 지정한 모든 테이블을 하나의 테이블 big_tbl_name로 조인(join)시킨다. 결합이 되어야 할 모든 테이블은 반드시 동일한(identical) 구조를 가지고 있어야 한다 (같은 컬럼 이름과 타입,같은 인덱스, 등등).

  • --silent, -s

침묵 모드(Silent mode). 에러가 발생될 경우에만 결과를 보여준다.

  • --test, -t

실제로 압축을 하는 것이 아니라, 테스트로만 실행한다.

  • --tmpdir=path, -T path

myisamchk가 임시 파일을 생성하는 위치의 디렉토리를 사용한다.

  • --verbose, -v

버보스 모드(Verbose mode). 압축 연산과 그 결과에 대한 진행 과정 정보를 작성한다.

  • --version, -V

버전 정보를 출력하고 종료.

  • --wait, -w

테이블이 사용 중이면 대기를 하고 재 시도를 한다. mysqld 서버가 외부 잠금이 비 활성화된 상태로 호출되는 경우, 압축이 진행되는 동안 서버가 그 테이블을 업데이트 해도 된다면 myisampack를 호출하는 것은 좋은 방법이 아니다.

 

아래의 명령어들은 전형적인 테이블 압축 세션을 보여 준다:

 

shell> ls -l station.*

-rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD

-rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI

-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

 

shell> myisamchk -dvv station

 

MyISAM file:     station

Isam-version:  2

Creation time: 1996-03-13 10:08:58

Recover time:  1997-02-02  3:06:43

Data records:              1192  Deleted blocks:              0

Datafile parts:            1192  Deleted data:                0

Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2

Max datafile length:   54657023  Max keyfile length:   33554431

Recordlength:               834

Record format: Fixed length

 

table description:

Key Start Len Index   Type                 Root  Blocksize    Rec/key

1   2     4   unique  unsigned long        1024       1024          1

2   32    30  multip. text                10240       1024          1

 

Field Start Length Type

1     1     1

2     2     4

3     6     4

4     10    1

5     11    20

6     31    1

7     32    30

8     62    35

9     97    35

10    132   35

11    167   4

12    171   16

13    187   35

14    222   4

15    226   16

16    242   20

17    262   20

18    282   20

19    302   30

20    332   4

21    336   4

22    340   1

23    341   8

24    349   8

25    357   8

26    365   2

27    367   2

28    369   4

29    373   4

30    377   1

31    378   2

32    380   8

33    388   4

34    392   4

35    396   4

36    400   4

37    404   1

38    405   4

39    409   4

40    413   4

41    417   4

42    421   4

43    425   4

44    429   20

45    449   30

46    479   1

47    480   1

48    481   79

49    560   79

50    639   79

51    718   79

52    797   8

53    805   1

54    806   1

55    807   20

56    827   4

57    831   4

 

shell> myisampack station.MYI

Compressing station.MYI: (1192 records)

- Calculating statistics

 

normal:     20  empty-space:   16  empty-zero:     12  empty-fill:  11

pre-space:   0  end-space:     12  table-lookups:   5  zero:         7

Original trees:  57  After join: 17

- Compressing file

87.14%

Remember to run myisamchk -rq on compressed tables

 

shell> ls -l station.*

-rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD

-rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI

-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

 

shell> myisamchk -dvv station

 

MyISAM file:     station

Isam-version:  2

Creation time: 1996-03-13 10:08:58

Recover time:  1997-04-17 19:04:26

Data records:               1192  Deleted blocks:              0

Datafile parts:             1192  Deleted data:                0

Datafile pointer (bytes):      3  Keyfile pointer (bytes):     1

Max datafile length:    16777215  Max keyfile length:     131071

Recordlength:                834

Record format: Compressed

 

table description:

Key Start Len Index   Type                 Root  Blocksize    Rec/key

1   2     4   unique  unsigned long       10240       1024          1

2   32    30  multip. text                54272       1024          1

 

Field Start Length Type                         Huff tree  Bits

1     1     1      constant                             1     0

2     2     4      zerofill(1)                          2     9

3     6     4      no zeros, zerofill(1)                2     9

4     10    1                                           3     9

5     11    20     table-lookup                         4     0

6     31    1                                           3     9

7     32    30     no endspace, not_always              5     9

8     62    35     no endspace, not_always, no empty    6     9

9     97    35     no empty                             7     9

10    132   35     no endspace, not_always, no empty    6     9

11    167   4      zerofill(1)                          2     9

12    171   16     no endspace, not_always, no empty    5     9

13    187   35     no endspace, not_always, no empty    6     9

14    222   4      zerofill(1)                          2     9

15    226   16     no endspace, not_always, no empty    5     9

16    242   20     no endspace, not_always              8     9

17    262   20     no endspace, no empty                8     9

18    282   20     no endspace, no empty                5     9

19    302   30     no endspace, no empty                6     9

20    332   4      always zero                          2     9

21    336   4      always zero                          2     9

22    340   1                                           3     9

23    341   8      table-lookup                         9     0

24    349   8      table-lookup                        10     0

25    357   8      always zero                          2     9

26    365   2                                           2     9

27    367   2      no zeros, zerofill(1)                2     9

28    369   4      no zeros, zerofill(1)                2     9

29    373   4      table-lookup                        11     0

30    377   1                                           3     9

31    378   2      no zeros, zerofill(1)                2     9

32    380   8      no zeros                             2     9

33    388   4      always zero                          2     9

34    392   4      table-lookup                        12     0

35    396   4      no zeros, zerofill(1)               13     9

36    400   4      no zeros, zerofill(1)                2     9

37    404   1                                           2     9

38    405   4      no zeros                             2     9

39    409   4      always zero                          2     9

40    413   4      no zeros                             2     9

41    417   4      always zero                          2     9

42    421   4      no zeros                             2     9

43    425   4      always zero                          2     9

44    429   20     no empty                             3     9

45    449   30     no empty                             3     9

46    479   1                                          14     4

47    480   1                                          14     4

48    481   79     no endspace, no empty               15     9

49    560   79     no empty                             2     9

50    639   79     no empty                             2     9

51    718   79     no endspace                         16     9

52    797   8      no empty                             2     9

53    805   1                                          17     1

54    806   1                                           3     9

55    807   20     no empty                             3     9

56    827   4      no zeros, zerofill(2)                2     9

57    831   4      no zeros, zerofill(1)                2     9

 

myisampack 은 다음 정보를 보여준다:

  • normal

추가적인 압축이 사용되지 않은 컬럼 숫자.

  • empty-space

빈 값을 포함하는 컬럼의 숫자. 이 스페이스는 1 비트이다.

  • empty-zero

바이너리 0 값만을 포함하는 컬럼의 숫자. 이것은 1 비트가 된다.

  • empty-fill

자신의 타입의 전체 바이트 범위를 갖추지 못하는 정수 컬럼의 숫자. 이것은 보다 작은 타입으로 변경된다. 예를 들면, BIGINT 컬럼(8 바이트)은 모든 값이 -128 에서 127 사이의 범위에 있다면 TINYINT 컬럼(1 바이트) 형태로 저장된다.

  • pre-space

스페이스를 앞에 두고(맨 앞에 한 칸 띄고) 저장된 10진법 컬럼의 숫자. 이 경우 각각의 값은 앞에 있는 스페이스의 숫자를 카운트에 포함한다.

  • end-space

맨 뒤에 스페이스가 있는 컬럼의 숫자. 이 경우, 각각의 값은 맨 뒤에 나오는 스페이스의 숫자를 카운트에 포함한다.

  • table-lookup

서로 다른 값의 작은 숫자만을 가지는 컬럼이며, 호프만(Huffman)식 압축을 하기 전에 ENUM 으로 변환된다.

  • zero

모든 값이 0인 컬럼의 숫자.

  • Original trees

호프만 트리(Huffman tree)의 첫 번째 숫자.

  • After join

헤더 스페이스(header space)를 저장하기 위해 트리를 조인(joining)한 후에 남게 되는 정확한 호프만 트리의 숫자.

 

테이블이 압축이 된 후, myisamchk –dvv는 각 컬럼에 대해서 부가적인 내용을 출력한다:

  • Type

데이터 타입. 값은 다음 디스크립터(descriptor)중의 하나를 포함할 수 있다:

    • constant

모든 열(로우)은 동일한 값을 가진다.

    • no endspace

엔드스페이스(endspace)는 저장하지 않는다.

    • no endspace, not_always

엔드스페이스를 저장하지 않고 모든 값에 대해서 엔드스페이스를 압축하지 않는다.

    • no endspace, no empty

엔드스페이스를 저장하지 않는다. 엠프티(empty) 값은 저장하지 않는다.

    • table-lookup

컬럼이 ENUM 로 변환된다.

    • zerofill(N)

값에서 가장 중요한 N  바이트는 항상 0 이며 저장되지 않는다.

    • no zeros

0을 저장하지 않는다.

    • always zero

0 값은 1 비트를 사용해서 저장한다.

  • Huff tree

컬럼과 관련이 있는 호프만 트리의 숫자.

  • Bits

호프만 트리에서 사용된 비트 수.

 

myisampack을 구동시킨 후, 반드시 myisamchk를 구동 시켜서 모든 인덱스를 재 구축해야 한다. 이 때 인덱스 블록을 정렬할 수 있게 되고 보다 효과적으로 MySQL 옵티마이저가 더 효율적으로 동작하는 데 필요한 통계치를 생성할 수도 있게 된다:

 

shell> myisamchk -rq --sort-index --analyze tbl_name.MYI

 

압축된 테이블을 MySQL데이터베이스 디렉토리에 설치를 한 후, mysqld로 하여금 새로운 테이블을 이용해 시작하도록 만들기 위해서 mysqladmin flush-tables를 실행해야 한다.

 

압축된 테이블의 압축을 해제하기 위해서는, --unpack 옵션을 myisamchk에 사용한다.

서울시 강남구 영동대로 602 6층  TEL: 02-6061-0006
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved