Loading...
MySQL 9.5 Reference Manual 9.5의 6.6.6 myisampack — Generate Compressed, Read-Only MyISAM Tables의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
myisampack 유틸리티는
MyISAM 테이블을 압축합니다.
myisampack는 테이블의 각 컬럼을 개별적으로
압축하는 방식으로 동작합니다.
일반적으로 myisampack는 데이터 파일을 40%에서
70% 정도로 줄여서 패킹합니다.
이후에 테이블이 사용될 때, 서버는 컬럼을 압축 해제하는 데 필요한 정보를 메모리로 읽어들입니다. 그 결과 개별 행에 접근할 때 성능이 훨씬 좋아지는데, 정확히 한 행만 압축 해제하면 되기 때문입니다.
MySQL은 가능하다면 mmap()을 사용하여
압축된 테이블에 대해 메모리 매핑을 수행합니다.
mmap()이 동작하지 않으면, MySQL은 일반적인
읽기/쓰기 파일 연산으로 되돌아갑니다.
다음 사항에 유의하십시오:
mysqld 서버가 외부 잠금을 비활성화한 상태로 실행된 경우, 패킹 과정 동안 서버가 테이블을 업데이트할 가능성이 있다면 myisampack를 실행하는 것은 좋지 않습니다. 서버를 중지한 상태에서 테이블을 압축하는 것이 가장 안전합니다.
테이블을 패킹한 후에는 읽기 전용이 됩니다. (CD에서 패킹된 테이블에 접근하는 경우처럼) 일반적으로 의도된 동작입니다.
myisampack는 파티션된 테이블을 지원하지 않습니다.
myisampack는 다음과 같이 실행합니다:
1myisampack [options] file_name ...
각 파일 이름 인자는 인덱스(.MYI) 파일의 이름이어야
합니다. 데이터베이스 디렉터리에 있지 않다면 파일에 대한 경로 이름을
명시해야 합니다. .MYI 확장자는 생략해도
괜찮습니다.
myisampack로 테이블을 압축한 후에는, myisamchk -rq를 사용하여 인덱스를 다시 빌드합니다. Section 6.6.4, “myisamchk — MyISAM Table-Maintenance Utility”를 참조하십시오.
myisampack는 다음 옵션을 지원합니다. 또한 옵션 파일을 읽고, 이에 대한 처리 옵션도 지원하며, 이에 대해서는 Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”에 설명되어 있습니다.
--help,
-?| Property | Value |
|---|---|
| Command-Line Format | --help |
도움말 메시지를 출력하고 종료합니다.
--backup,
-b| Property | Value |
|---|---|
| Command-Line Format | --backup |
각 테이블의 데이터 파일에 대해 tbl_name.OLD라는 이름으로
백업을 생성합니다.
| Property | Value |
|---|---|
| Command-Line Format | --character-sets-dir=dir_name |
| Type | 디렉터리 이름 |
문자 세트가 설치된 디렉터리입니다. Section 12.15, “Character Set Configuration”를 참조하십시오.
--debug[=debug_options],
-# [debug_options]| Property | Value |
|---|---|
| Command-Line Format | --debug[=debug_options] |
| Type | 문자열 |
| Default Value | d:t:o |
디버깅 로그를 작성합니다. 전형적인
debug_options 문자열은
d:t:o,file_name입니다.
기본값은 d:t:o입니다.
이 옵션은 MySQL이
WITH_DEBUG를 사용하여 빌드된 경우에만
사용할 수 있습니다. Oracle에서 제공하는 MySQL 릴리스
바이너리는 이 옵션을 사용하여 빌드되지
않습니다.
--force,
-f| Property | Value |
|---|---|
| Command-Line Format | --force |
패킹된 테이블이 원본보다 커지거나 이전에
myisampack 실행에서 생성된 중간 파일이
존재하더라도 패킹된 테이블을 생성합니다.
(myisampack는 테이블을 압축하는 동안
데이터베이스 디렉터리에
tbl_name.TMD
라는 이름의 중간 파일을 생성합니다.
myisampack를 강제로 종료하면
.TMD 파일이 삭제되지 않을 수 있습니다.)
일반적으로 myisampack는
tbl_name.TMD
가 존재하면 오류와 함께 종료합니다.
--force를 사용하면,
myisampack는 테이블을 계속 패킹합니다.
--join=big_tbl_name,
-j big_tbl_name| Property | Value |
|---|---|
| Command-Line Format | --join=big_tbl_name |
| Type | 문자열 |
커맨드 라인에 지정된 모든 테이블을 하나의
패킹된 테이블 _big_tbl_name_으로 조인합니다. 합쳐질
모든 테이블은 동일한 구조(동일한 컬럼 이름과 타입, 동일한
인덱스 등)를 가져야만 합니다.
_big_tbl_name_은 조인 작업 전에
존재해서는 안 됩니다. 커맨드 라인에
_big_tbl_name_으로 병합할 소스 테이블은
모두 존재해야 합니다.
소스 테이블은 조인 작업을 위해 읽히지만 수정되지는
않습니다.
--silent,
-s| Property | Value |
|---|---|
| Command-Line Format | --silent |
조용한 모드입니다. 오류가 발생할 때만 출력을 작성합니다.
--test,
-t| Property | Value |
|---|---|
| Command-Line Format | --test |
실제로 테이블을 패킹하지 않고, 패킹 가능 여부만 테스트합니다.
--tmpdir=dir_name,
-T dir_name| Property | Value |
|---|---|
| Command-Line Format | --tmpdir=dir_name |
| Type | 디렉터리 이름 |
myisampack가 임시 파일을 생성할 위치로 이름이 지정된 디렉터리를 사용합니다.
--verbose,
-v| Property | Value |
|---|---|
| Command-Line Format | --verbose |
자세한 모드입니다. 패킹 작업의 진행 상황과 결과에 대한 정보를 출력합니다.
--version,
-V| Property | Value |
|---|---|
| Command-Line Format | --version |
버전 정보를 출력하고 종료합니다.
--wait,
-w| Property | Value |
|---|---|
| Command-Line Format | --wait |
테이블이 사용 중이면 기다렸다가 다시 시도합니다. mysqld 서버가 외부 잠금을 비활성화한 상태로 실행된 경우, 패킹 과정 동안 서버가 테이블을 업데이트할 가능성이 있다면 myisampack를 실행하는 것은 좋지 않습니다.
다음 커맨드 시퀀스는 전형적인 테이블 압축 세션을 보여줍니다:
1$> ls -l station.* 2-rw-rw-r-- 1 jones my 994128 Apr 17 19:00 station.MYD 3-rw-rw-r-- 1 jones my 53248 Apr 17 19:00 station.MYI 4 5$> myisamchk -dvv station 6 7MyISAM file: station 8Isam-version: 2 9Creation time: 1996-03-13 10:08:58 10Recover time: 1997-02-02 3:06:43 11Data records: 1192 Deleted blocks: 0 12Datafile parts: 1192 Deleted data: 0 13Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2 14Max datafile length: 54657023 Max keyfile length: 33554431 15Recordlength: 834 16Record format: Fixed length 17 18table description: 19Key Start Len Index Type Root Blocksize Rec/key 201 2 4 unique unsigned long 1024 1024 1 212 32 30 multip. text 10240 1024 1 22 23Field Start Length Type 241 1 1 252 2 4 263 6 4 274 10 1 285 11 20 296 31 1 307 32 30 318 62 35 329 97 35 3310 132 35 3411 167 4 3512 171 16 3613 187 35 3714 222 4 3815 226 16 3916 242 20 4017 262 20 4118 282 20 4219 302 30 4320 332 4 4421 336 4 4522 340 1 4623 341 8 4724 349 8 4825 357 8 4926 365 2 5027 367 2 5128 369 4 5229 373 4 5330 377 1 5431 378 2 5532 380 8 5633 388 4 5734 392 4 5835 396 4 5936 400 4 6037 404 1 6138 405 4 6239 409 4 6340 413 4 6441 417 4 6542 421 4 6643 425 4 6744 429 20 6845 449 30 6946 479 1 7047 480 1 7148 481 79 7249 560 79 7350 639 79 7451 718 79 7552 797 8 7653 805 1 7754 806 1 7855 807 20 7956 827 4 8057 831 4 81 82$> myisampack station.MYI 83Compressing station.MYI: (1192 records) 84- Calculating statistics 85 86normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11 87pre-space: 0 end-space: 12 table-lookups: 5 zero: 7 88Original trees: 57 After join: 17 89- Compressing file 9087.14% 91Remember to run myisamchk -rq on compressed tables 92 93$> myisamchk -rq station 94- check record delete-chain 95- recovering (with sort) MyISAM-table 'station' 96Data records: 1192 97- Fixing index 1 98- Fixing index 2 99 100$> mysqladmin -uroot flush-tables 101 102$> ls -l station.* 103-rw-rw-r-- 1 jones my 127874 Apr 17 19:00 station.MYD 104-rw-rw-r-- 1 jones my 55296 Apr 17 19:04 station.MYI 105 106$> myisamchk -dvv station 107 108MyISAM file: station 109Isam-version: 2 110Creation time: 1996-03-13 10:08:58 111Recover time: 1997-04-17 19:04:26 112Data records: 1192 Deleted blocks: 0 113Datafile parts: 1192 Deleted data: 0 114Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1 115Max datafile length: 16777215 Max keyfile length: 131071 116Recordlength: 834 117Record format: Compressed 118 119table description: 120Key Start Len Index Type Root Blocksize Rec/key 1211 2 4 unique unsigned long 10240 1024 1 1222 32 30 multip. text 54272 1024 1 123 124Field Start Length Type Huff tree Bits 1251 1 1 constant 1 0 1262 2 4 zerofill(1) 2 9 1273 6 4 no zeros, zerofill(1) 2 9 1284 10 1 3 9 1295 11 20 table-lookup 4 0 1306 31 1 3 9 1317 32 30 no endspace, not_always 5 9 1328 62 35 no endspace, not_always, no empty 6 9 1339 97 35 no empty 7 9 13410 132 35 no endspace, not_always, no empty 6 9 13511 167 4 zerofill(1) 2 9 13612 171 16 no endspace, not_always, no empty 5 9 13713 187 35 no endspace, not_always, no empty 6 9 13814 222 4 zerofill(1) 2 9 13915 226 16 no endspace, not_always, no empty 5 9 14016 242 20 no endspace, not_always 8 9 14117 262 20 no endspace, no empty 8 9 14218 282 20 no endspace, no empty 5 9 14319 302 30 no endspace, no empty 6 9 14420 332 4 always zero 2 9 14521 336 4 always zero 2 9 14622 340 1 3 9 14723 341 8 table-lookup 9 0 14824 349 8 table-lookup 10 0 14925 357 8 always zero 2 9 15026 365 2 2 9 15127 367 2 no zeros, zerofill(1) 2 9 15228 369 4 no zeros, zerofill(1) 2 9 15329 373 4 table-lookup 11 0 15430 377 1 3 9 15531 378 2 no zeros, zerofill(1) 2 9 15632 380 8 no zeros 2 9 15733 388 4 always zero 2 9 15834 392 4 table-lookup 12 0 15935 396 4 no zeros, zerofill(1) 13 9 16036 400 4 no zeros, zerofill(1) 2 9 16137 404 1 2 9 16238 405 4 no zeros 2 9 16339 409 4 always zero 2 9 16440 413 4 no zeros 2 9 16541 417 4 always zero 2 9 16642 421 4 no zeros 2 9 16743 425 4 always zero 2 9 16844 429 20 no empty 3 9 16945 449 30 no empty 3 9 17046 479 1 14 4 17147 480 1 14 4 17248 481 79 no endspace, no empty 15 9 17349 560 79 no empty 2 9 17450 639 79 no empty 2 9 17551 718 79 no endspace 16 9 17652 797 8 no empty 2 9 17753 805 1 17 1 17854 806 1 3 9 17955 807 20 no empty 3 9 18056 827 4 no zeros, zerofill(2) 2 9 18157 831 4 no zeros, zerofill(1) 2 9
myisampack는 다음과 같은 종류의 정보를 출력합니다:
normal추가 패킹이 사용되지 않은 컬럼의 개수입니다.
empty-space값이 공백 문자만으로 구성된 컬럼의 개수입니다. 이 값들은 한 비트만 차지합니다.
empty-zero값이 바이너리 zero만으로 구성된 컬럼의 개수입니다. 이 값들은 한 비트만 차지합니다.
empty-fill자신의 타입이 가질 수 있는 전체 바이트 범위를 사용하지 않는
정수 컬럼의 개수입니다. 이 컬럼은 더 작은
타입으로 변경됩니다. 예를 들어,
BIGINT
컬럼(8바이트)은 모든 값이 -128에서
127 범위에 있다면
TINYINT 컬럼(1바이트)으로 저장될 수 있습니다.
pre-space앞에 공백을 두고 저장되는 10진 컬럼의 개수입니다. 이 경우 각 값에는 앞쪽 공백의 개수가 함께 저장됩니다.
end-space많은 뒤쪽 공백을 포함하는 컬럼의 개수입니다. 이 경우 각 값에는 뒤쪽 공백의 개수가 함께 저장됩니다.
table-lookup컬럼에 소수의 서로 다른 값만 존재하여,
허프만 압축 전에
ENUM으로 변환된
컬럼입니다.
zero모든 값이 zero인 컬럼의 개수입니다.
Original trees초기에 존재하던 허프만 트리의 개수입니다.
After join헤더 공간을 절약하기 위해 트리를 합친 후 남은 서로 다른 허프만 트리의 개수입니다.
테이블이 압축된 후에는,
myisamchk -dvv가 출력하는
Field 라인에 각 컬럼에 대한 추가 정보가
포함됩니다:
Type데이터 타입입니다. 값에는 다음과 같은 기술어가 포함될 수 있습니다:
constant
모든 행이 동일한 값을 갖습니다.
no endspace
뒤쪽 공백을 저장하지 않습니다.
no endspace, not_always
뒤쪽 공백을 저장하지 않으며, 모든 값에 대해 뒤쪽 공백 압축을 수행하지는 않습니다.
no endspace, no empty
뒤쪽 공백을 저장하지 않습니다. 빈 값도 저장하지 않습니다.
table-lookup
컬럼이
ENUM으로 변환되었습니다.
zerofill(N)
값에서 가장 상위의 N 바이트는 항상 0이며
저장되지 않습니다.
no zeros
zero를 저장하지 않습니다.
always zero
zero 값은 한 비트를 사용하여 저장됩니다.
Huff tree
컬럼에 연관된 허프만 트리의 번호입니다.
Bits허프만 트리에서 사용되는 비트 수입니다.
myisampack를 실행한 후에는, myisamchk를 사용하여 인덱스를 다시 생성해야 합니다. 이때 인덱스 블록을 정렬하고, MySQL 옵티마이저가 더 효율적으로 동작하는 데 필요한 통계도 생성할 수 있습니다:
1myisamchk -rq --sort-index --analyze tbl_name.MYI
패킹된 테이블을 MySQL 데이터베이스 디렉터리에 설치한 후에는 mysqladmin flush-tables를 실행하여 mysqld가 새로운 테이블을 사용하기 시작하도록 강제해야 합니다.
6.6.5 myisamlog — Display MyISAM Log File Contents
6.6.7 mysql_config_editor — MySQL Configuration Utility