4.6.3.5 myisamchk에 의한 테이블 정보 검색
MyISAM 테이블 정보 또는 통계를 얻으려면 다음과 같은 명령을 사용합니다. 이 명령의 출력은이 섹션의 나머지 부분에서 설명합니다.
myisamchk -d
tbl_namemyisamchk를 "describe 모드"로 실행하고 테이블 정보를 생성합니다. 외부 잠금이 해제되어있는 MySQL 서버를 시작하는 경우에는 myisamchk는 실행 중에 업데이트가있는 테이블에 대해 오류를보고 할 수 있습니다. 그러나 describe 모드에서는 myisamchk는 테이블을 변경하지 않기 때문에 데이터가 손상 될 위험은 없습니다.
myisamchk -dv
tbl_name-v를 추가하면 myisamchk는 고급 모드에서 실행되는 테이블에 대해 더 많은 정보를 생성합니다.-v를 다시 사용하면 더 많은 정보가 생성됩니다.myisamchk -eis
tbl_name테이블에서 가장 중요한 정보 만 표시합니다. 이 작업은 테이블 전체를 읽어야하므로 시간이 걸립니다.
myisamchk -eiv
tbl_name이것은
-eis와 비슷하지만 진행 과정이 표시됩니다.
tbl_name 인수는 섹션 4.6.3 "myisamchk - MyISAM 테이블 유지 보수 유틸리티" 에서 설명하는 바와 같이, MyISAM 테이블의 이름 또는 색인 파일 이름 중 하나입니다. 여러 tbl_name 인수를 지정할 수 있습니다.
person 이라는 이름의 테이블 구조가 다음과 같이되어 있다고합니다. (다음에 나타내는 myisamchk의 출력 예에서 일부 값이 더 작고 출력 형식에 적합 할 수 있도록, MAX_ROWS 테이블 옵션이 포함되어 있습니다.)
CREATE TABLE person ( id INT NOT NULL AUTO_INCREMENT, last_name VARCHAR (20) NOT NULL, first_name VARCHAR (20) NOT NULL, birth DATE, death DATE, PRIMARY KEY (id) INDEX (last_name, first_name) INDEX (birth) ) MAX_ROWS = 1000000;
또한 테이블의 데이터 파일 및 인덱스 파일의 크기는 다음과 같이되어 있다고합니다.
-rw-rw ---- 1 mysql mysql 9347072 Aug 19 11:47 person.MYD -rw-rw ---- 1 mysql mysql 6066176 Aug 19 11:47 person.MYI
myisamchk -dvv의 출력 예 :
MyISAM file : person Record format : Packed Character set : latin1_swedish_ci (8) File-version : 1 Creation time : 2009-08-19 16:47:41 Recover time : 2009-08-19 16:47:56 Status : checked, analyzed, optimized keys Auto increment key : 1 Last value : 306688 Data records : 306688 Deleted blocks : 0 Datafile parts : 306688 Deleted data : 0 Datafile pointer (bytes) : 4 Keyfile pointer (bytes) : 3 Datafile length : 9347072 Keyfile length : 6066176 Max datafile length : 4294967294 Max keyfile length : 17179868159 Recordlength : 54 table description : Key Start Len Index Type Rec / key Root Blocksize 1 2 4 unique long 1 99328 1024 2 6 20 multip. varchar prefix 512 3563520 1024 27 20 varchar 512 3 48 3 multip. uint24 NULL 306688 6065152 1024 Field Start Length Nullpos Nullbit Type 1 1 1 2 2 4 no zeros 3 6 21 varchar 4 27 21 varchar 5 48 3 1 no zeros 6 51 3 1 2 no zeros
myisamchk가 생성하는 정보의 유형에 대한 설명입니다. "Keyfile"은 인덱스 파일입니다. "레코드 '와'행 ','필드 '와'열 '은 각각 동의어입니다.
테이블 정보의 처음 부분에 다음 값이 포함됩니다.
MyISAM fileMyISAM(인덱스) 파일의 이름입니다.Record format테이블의 행을 저장하는 데 사용되는 형식. 위의 예에서는
Fixed length를 사용하고 있습니다. 다른 값은Compressed와Packed가 있습니다. (Packed는SHOW TABLE STATUS보고서에서Dynamic로보고 될 것으로 대응합니다.)Chararacter set테이블의 기본 문자 세트.
File-versionMyISAM형식의 버전. 현재 항상 1입니다.Creation time언제 데이터 파일이 생성 되었는가?
Recover time인덱스 파일 / 데이터 파일이 마지막으로 언제 다시 구성 되었는가?
Status테이블의 상태 플래그. 가능한 값은
crashed,open,changed,analyzed,optimized keys및sorted index pages입니다.Auto increment key,Last value테이블의
AUTO_INCREMENT컬럼과 연관된 키 번호 및 컬럼에 대해 가장 최근에 생성 된 값입니다. 그런 열이없는 경우이 필드는 표시되지 않습니다.Data records테이블 내의 행수.
Deleted blocks삭제 된 블록에서 공간이 아직 예약되어 있지만 수. 테이블을 최적화하고이 공간을 최소화 할 수 있습니다. 섹션 7.6.4 "MyISAM 테이블 최적화" 를 참조하십시오.
Datafile parts동적 행 형식으로, 이것은 데이터 블록의 수를 나타냅니다. 조각난 레코드가없는 최적화 된 테이블에서는 이것은
Data records와 동일합니다.Deleted data미사용 삭제 된 데이터의 바이트 수. 테이블을 최적화하고이 공간을 최소화 할 수 있습니다. 섹션 7.6.4 "MyISAM 테이블 최적화" 를 참조하십시오.
Datafile pointer데이터 파일 포인터의 크기 (바이트 단위). 일반적으로 2,3,4 또는 5 바이트입니다. 대부분의 테이블은 2 바이트로 대응할 수 있지만, 이것은 아직 MySQL에서 제어 할 수 없습니다. 고정 테이블에서는 이것은 행의 주소입니다. 동적 테이블에서 이는 바이트 주소입니다.
Keyfile pointer인덱스 파일 포인터의 크기 (바이트 단위). 일반적으로 1, 2 또는 3 바이트입니다. 대부분의 테이블은 2 바이트로 대응할 수 있지만, 이것은 MySQL이 자동으로 계산됩니다. 항상 블록 주소입니다.
Max datafile length테이블 데이터 파일이 어디까지 길게 될 수 있을까 (바이트 단위).
Max keyfile length테이블 인덱스 파일이 어디까지 길게 될 수 있을까 (바이트 단위).
Recordlength각 행이 사용하는 공간 (바이트 단위).
출력 table description 부분은 테이블의 모든 키의 목록이 포함됩니다. myisamchk는 각각의 키에 대한 낮은 수준 정보를 표시합니다.
Key이 키의 번호. 이 값은 키의 첫 번째 컬럼에만 표시됩니다. 이 값이 누락 된 경우 행은 여러 카라무키의 2 번째 이후의 컬럼에 대응합니다. 예제 테이블에서 두 번째 인덱스에 대해 두 개의
table description줄 수 있습니다. 이것은 두 부분으로 구성된 다중 인덱스임을 보여줍니다.Start인덱스의이 부분이 행의 어디에서 시작 되는가?
Len인덱스의이 부분의 길이. 압축 된 번호는 이것은 항상 컬럼 전체 길이 인 것입니다. 문자열은 문자열 컬럼의 프리픽스를 인덱싱 할 수 있기 때문에 인덱스 된 컬럼의 전체 길이보다 짧은 경우가 있습니다. 다중 키의 총 길이는 모든 키 부분의
Len값의 합계입니다.Index키 값이 인덱스에 여러 번 존재할 수 있는지. 가능한 값은
unique또는multip(multiple)입니다.Type인덱스의이 부분의 데이터 형식입니다.
packed,stripped, 또는empty의 값 중 하나의MyISAM데이터 형식입니다.Root루트 인덱스 블록의 주소.
Blocksize각 인덱스 블록의 크기. 기본적으로 1024이지만,이 값은 MySQL이 소스에서 빌드되는 경우 컴파일시 변경할 수 있습니다.
Rec/key이것은 최적화 프로그램에서 사용되는 통계입니다. 이 인덱스 값 당 몇 줄이 있는지를 나타냅니다. 고유 인덱스는 값은 항상 1입니다. 이것은 테이블의로드 (또는 큰 변경) 다음에 myisamchk -a으로 업데이트 될 수 있습니다. 전혀 업데이트되지 않으면 기본값 30가 지정됩니다.
출력의 마지막 부분은 각 컬럼의 정보를 보여줍니다.
Field컬럼 번호.
Start테이블의 행에서 컬럼 바이트 위치.
Length컬럼의 길이 (바이트 단위).
Nullpos,NullbitNULL를 잡히는 컬럼에서는MyISAM은NULL값을 바이트의 플래그로 저장합니다. Null에있는 열이 몇인지하여이를 위해 사용되는 바이트가 1 이상있을 수 있습니다.Nullpos값 및Nullbit값이 비어 있지 않은 경우는 컬럼이NULL여부를 나타내는 플래그가 어떤 바이트 및 비트에 포함되는지를 보여줍니다.NULL플래그를 저장하는 데 사용되는 위치와 바이트 필드 1 행에 표시됩니다.person테이블에는 5 개의 컬럼 밖에 없는데Field행이 6 개있는 것은이 때문입니다.Type데이터 형식입니다. 이 값은 다음 중 하나의 디스크립터를 포함 할 수 있습니다.
constant모든 행은 같은 값을 가지고 있습니다.
no endspace엔드 스페이스를 보존하지 않습니다.
no endspace, not_always엔드 스페이스를 보존하지 않으며 모든 값에 엔드 스페이스 압축을하지 않습니다.
no endspace, no empty엔드 스페이스를 보존하지 않습니다. 빈 값을 저장하지 않습니다.
table-lookup컬럼은
ENUM으로 변환되었습니다.zerofill(N)값 중 최상위
N바이트는 항상 0이며 저장되지 않습니다.no zeros제로를 저장하지 않습니다.
always zero제로 값은 1 비트를 사용하여 저장됩니다.
Huff tree열 관련있는 허프만 트리의 수.
Bits허프만 트리로 사용되는 비트 수.
Huff tree 필드 및 Bits 필드는 테이블이 myisampack로 압축되어있는 경우에 표시됩니다. 이 정보의 예는 섹션 4.6.5 "myisampack - 압축 된 읽기 전용 MyISAM 테이블 생성" 을 참조하십시오.
myisamchk -eiv의 출력 예
Checking MyISAM file : person
Data records : 306688 Deleted blocks : 0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024 :
- check index reference
- check data record references index : 1
Key : 1 : Keyblocks used : 98 % Packed : 0 % Max levels : 3
- check data record references index : 2
Key : 2 : Keyblocks used : 99 % Packed : 97 % Max levels : 3
- check data record references index : 3
Key : 3 : Keyblocks used : 98 % Packed : -14 % Max levels : 3
Total : Keyblocks used : 98 % Packed : 89 %
- check records and index references
*** LOTS OF ROW NUMBERS DELETED ***
Records : 306688 M.recordlength : 25 Packed : 83 %
Recordspace used : 97 % Empty space : 2 % Blocks / Record : 1.00
Record blocks : 306688 Delete blocks : 0
Record data : 7934464 Deleted data : 0
Lost space : 256512 Linkdata : 1156096
User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7 Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage : 1046926 bytes (1023k)
myisamchk -eiv의 출력에는 다음 정보가 포함됩니다.
Data records테이블 내의 행수.
Deleted blocks삭제 된 블록에서 공간이 아직 예약되어 있지만 수. 테이블을 최적화하고이 공간을 최소화 할 수 있습니다. 섹션 7.6.4 "MyISAM 테이블 최적화" 를 참조하십시오.
Key키 번호.
Keyblocks used키 블록의 몇 퍼센트를 사용하고 있는가? 테이블이 myisamchk으로 재구성 된지 얼마 안된 경우는 값이 매우 높고 (이론적 인 최대 값에 매우 근접)입니다.
PackedMySQL은 일반적인 접미사를 가진 키 값의 팩을 시도합니다. 이것은
CHAR컬럼과VARCHAR컬럼의 인덱스에만 사용할 수 있습니다. 왼쪽에 유사한 부분이있는 인덱싱 된 긴 문자열에서 사용되는 공간을 따라서 크게 줄일 수있는 경우가 있습니다. 상기의 예에서는 두 번째 키는 길이가 40 바이트에서 97 %의 공간 절약이 실현되고 있습니다.Max levels이 키의 B 트리의 깊이. 키 값이 긴 대형 테이블에서 값이 커집니다.
Records테이블 내의 행수.
M.recordlength평균 유키나가. 고정 길이 행을 가진 테이블의 모든 행이 동일한 길이이기 때문에 이것은 정확한 행의 길이입니다.
PackedMySQL은 문자열의 마지막에서 공백을 제거합니다.
Packed값은 이렇게함으로써 달성 된 감소 비율을 나타냅니다.Recordspace used데이터 파일의 몇 퍼센트를 사용하고 있는가?
Empty space데이터 파일의 몇 퍼센트가 사용되지 않는.
Blocks/Record행당 평균 블록 수 (즉, 단편화 된 행이 몇 개의 링크로 구성되는지). 고정 형식의 테이블에서이 값은 항상 1.0입니다. 이 값은 가능한 한 1.0에 가깝도록하십시오. 너무 커질 경우, 테이블을 재구성 할 수 있습니다. 섹션 7.6.4 "MyISAM 테이블 최적화" 를 참조하십시오.
Recordblocks사용 된 블록 (링크) 수. 고정 형식 테이블에서는 이것은 행수와 동일합니다.
Deleteblocks삭제 된 블록 (링크) 수.
Recorddata데이터 파일에서 사용 된 바이트 수.
Deleted data데이터 파일에서 삭제 된 (사용하지 않는) 바이트 수.
Lost space행이 더 짧은 길이로 업데이트되면 일부 공간이 없어집니다. 이것은 그런 손실의 합계 (바이트 단위)입니다.
Linkdata동적 테이블 형식이 사용되는 경우 행의 조각은 포인터 (각각 4-7 바이트)에 연결됩니다.
Linkdata는 이런 포인터 모두가 사용하는 스토리지 용량의 합계입니다.