Путеводитель по Руководству Linux

  User  |  Syst  |  Libr  |  Device  |  Files  |  Other  |  Admin  |  Head  |



   myisamchk    ( 1 )

утилита для обслуживания таблиц MyISAM (MyISAM table-maintenance utility)

MYISAMCHK TABLE INFORMATION

To obtain a description of a MyISAM table or statistics about it, use the commands shown here. The output from these commands is explained later in this section.

myisamchk -d tbl_name

Runs myisamchk in 'describe mode' to produce a description of your table. If you start the MariaDB server with external locking disabled, myisamchk may report an error for a table that is updated while it runs. However, because myisamchk does not change the table in describe mode, there is no risk of destroying data.

myisamchk -dv tbl_name

Adding -v runs myisamchk in verbose mode so that it produces more information about the table. Adding -v a second time produces even more information.

myisamchk -eis tbl_name

Shows only the most important information from a table. This operation is slow because it must read the entire table.

myisamchk -eiv tbl_name

This is like -eis, but tells you what is being done.

The tbl_name argument can be either the name of a MyISAM table or the name of its index file, as described in myisamchk(1). Multiple tbl_name arguments can be given.

Suppose that a table named person has the following structure. (The MAX_ROWS table option is included so that in the example output from myisamchk shown later, some values are smaller and fit the output format more easily.)

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;

Suppose also that the table has these data and index file sizes:

-rw-rw---- 1 mysql mysql 9347072 Aug 19 11:47 person.MYD -rw-rw---- 1 mysql mysql 6066176 Aug 19 11:47 person.MYI

Example of myisamchk -dvv output:

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 1 no zeros 6 51 3 1 2 no zeros

Explanations for the types of information myisamchk produces are given here. 'Keyfile' refers to the index file. 'Record' and 'row' are synonymous, as are 'field' and 'column.'

The initial part of the table description contains these values:

• MyISAM file

Name of the MyISAM (index) file.

• Record format

The format used to store table rows. The preceding examples use Fixed length. Other possible values are Compressed and Packed. (Packed corresponds to what SHOW TABLE STATUS reports as Dynamic.)

• Chararacter set

The table default character set.

• File-version

Version of MyISAM format. Currently always 1.

• Creation time

When the data file was created.

• Recover time

When the index/data file was last reconstructed.

• Status

Table status flags. Possible values are crashed, open, changed, analyzed, optimized keys, and sorted index pages.

• Auto increment key, Last value

The key number associated the table´s AUTO_INCREMENT column, and the most recently generated value for this column. These fields do not appear if there is no such column.

• Data records

The number of rows in the table.

• Deleted blocks

How many deleted blocks still have reserved space. You can optimize your table to minimize this space. See Section 6.6.4, 'MyISAM Table Optimization'.

• Datafile parts

For dynamic-row format, this indicates how many data blocks there are. For an optimized table without fragmented rows, this is the same as Data records.

• Deleted data

How many bytes of unreclaimed deleted data there are. You can optimize your table to minimize this space. See Section 6.6.4, 'MyISAM Table Optimization'.

• Datafile pointer

The size of the data file pointer, in bytes. It is usually 2, 3, 4, or 5 bytes. Most tables manage with 2 bytes, but this cannot be controlled from MariaDB yet. For fixed tables, this is a row address. For dynamic tables, this is a byte address.

• Keyfile pointer

The size of the index file pointer, in bytes. It is usually 1, 2, or 3 bytes. Most tables manage with 2 bytes, but this is calculated automatically by MariaDB. It is always a block address.

• Max datafile length

How long the table data file can become, in bytes.

• Max keyfile length

How long the table index file can become, in bytes.

• Recordlength

How much space each row takes, in bytes.

The table description part of the output includes a list of all keys in the table. For each key, myisamchk displays some low-level information:

• Key

This key´s number. This value is shown only for the first column of the key. If this value is missing, the line corresponds to the second or later column of a multiple-column key. For the table shown in the example, there are two table description lines for the second index. This indicates that it is a multiple-part index with two parts.

• Start

Where in the row this portion of the index starts.

• Len

How long this portion of the index is. For packed numbers, this should always be the full length of the column. For strings, it may be shorter than the full length of the indexed column, because you can index a prefix of a string column. The total length of a multiple-part key is the sum of the Len values for all key parts.

• Index

Whether a key value can exist multiple times in the index. Possible values are unique or multip. (multiple).

• Type

What data type this portion of the index has. This is a MyISAM data type with the possible values packed, stripped, or empty.

• Root

Address of the root index block.

• Blocksize

The size of each index block. By default this is 1024, but the value may be changed at compile time when MariaDB is built from source.

• Rec/key

This is a statistical value used by the optimizer. It tells how many rows there are per value for this index. A unique index always has a value of 1. This may be updated after a table is loaded (or greatly changed) with myisamchk -a. If this is not updated at all, a default value of 30 is given.

The last part of the output provides information about each column:

• Field

The column number.

• Start

The byte position of the column within table rows.

• Length

The length of the column in bytes.

• Nullpos, Nullbit

For columns that can be NULL, MyISAM stores NULL values as a flag in a byte. Depending on how many nullable columns there are, there can be one or more bytes used for this purpose. The Nullpos and Nullbit values, if nonempty, indicate which byte and bit contains that flag indicating whether the column is NULL.

The position and number of bytes used to store NULL flags is shown in the line for field 1. This is why there are six Field lines for the person table even though it has only five columns.

• Type

The data type. The value may contain any of the following descriptors:

• constant

All rows have the same value.

• no endspace

Do not store endspace.

• no endspace, not_always

Do not store endspace and do not do endspace compression for all values.

• no endspace, no empty

Do not store endspace. Do not store empty values.

• table-lookup

The column was converted to an ENUM.

• zerofill(N)

The most significant N bytes in the value are always 0 and are not stored.

• no zeros

Do not store zeros.

• always zero

Zero values are stored using one bit.

• Huff tree

The number of the Huffman tree associated with the column.

• Bits

The number of bits used in the Huffman tree.

The Huff tree and Bits fields are displayed if the table has been compressed with myisampack. See myisampack(1), for an example of this information.

Example of myisamchk -eiv output:

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 output includes the following information:

• Data records

The number of rows in the table.

• Deleted blocks

How many deleted blocks still have reserved space. You can optimize your table to minimize this space. See Section 6.6.4, 'MyISAM Table Optimization'.

• Key

The key number.

• Keyblocks used

What percentage of the keyblocks are used. When a table has just been reorganized with myisamchk, the values are very high (very near theoretical maximum).

• Packed

MariaDB tries to pack key values that have a common suffix. This can only be used for indexes on CHAR and VARCHAR columns. For long indexed strings that have similar leftmost parts, this can significantly reduce the space used. In the preceding example, the second key is 40 bytes long and a 97% reduction in space is achieved.

• Max levels

How deep the B-tree for this key is. Large tables with long key values get high values.

• Records

How many rows are in the table.

• M.recordlength

The average row length. This is the exact row length for tables with fixed-length rows, because all rows have the same length.

• Packed

MariaDB strips spaces from the end of strings. The Packed value indicates the percentage of savings achieved by doing this.

• Recordspace used

What percentage of the data file is used.

• Empty space

What percentage of the data file is unused.

• Blocks/Record

Average number of blocks per row (that is, how many links a fragmented row is composed of). This is always 1.0 for fixed-format tables. This value should stay as close to 1.0 as possible. If it gets too large, you can reorganize the table. See Section 6.6.4, 'MyISAM Table Optimization'.

• Recordblocks

How many blocks (links) are used. For fixed-format tables, this is the same as the number of rows.

• Deleteblocks

How many blocks (links) are deleted.

• Recorddata

How many bytes in the data file are used.

• Deleted data

How many bytes in the data file are deleted (unused).

• Lost space

If a row is updated to a shorter length, some space is lost. This is the sum of all such losses, in bytes.

• Linkdata

When the dynamic table format is used, row fragments are linked with pointers (4 to 7 bytes each). Linkdata is the sum of the amount of storage used by all such pointers.