4.6.3.5 通过 myisamchk 获取 table 信息

要获取MyISAMtable 的描述或有关它的统计信息,请使用此处显示的命令。这些命令的输出将在本节稍后说明。

在“描述模式”下运行myisamchk以生成 table 的描述。如果您在禁用外部锁定的情况下启动 MySQL 服务器,则myisamchk可能会报告 table 在运行时更新的错误。但是,由于myisamchk不会在描述模式下更改 table,因此没有破坏数据的风险。

添加-v将以详细模式运行myisamchk,以便它生成有关该 table 的更多信息。第二次加上-v会产生更多信息。

仅显示 table 格中最重要的信息。此操作很慢,因为它必须读取整个 table。

就像-eis,但是告诉您正在做什么。

假设名为person的 table 具有以下结构。 (包含MAX_ROWS table 选项,以便在稍后显示的myisamchk的示例输出中,某些值更小并且更容易适应输出格式。)

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 ENGINE=MYISAM;

还假设该 table 具有以下数据和索引文件大小:

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

myisamchk产生的信息类型的说明在此处给出。 “密钥文件”是指索引文件。 “记录”和“行”同义,“字段”和“列”同义。

table 描述的初始部分包含以下值:

MyISAM(索引)文件的名称。

用于存储 table 行的格式。前面的示例使用Fixed length。其他可能的值为CompressedPacked。 (Packed对应于SHOW TABLE STATUS报告为Dynamic.)

table 的默认字符集。

MyISAM格式的版本。总是 1.

创建数据文件的时间。

上次重建索引/数据文件的时间。

table 状态标志。可能的值为crashedopenchangedanalyzedoptimized keyssorted index pages

与 table 的AUTO_INCREMENT列关联的键号,以及该列的最新生成的值。如果没有这样的列,则不会出现这些字段。

table 中的行数。

多少个删除的块仍具有保留空间。您可以优化 table 以最小化此空间。参见第 7.6.4 节“ MyISAMtable 优化”

对于动态行格式,这 table 明有多少个数据块。对于没有碎片行的优化 table,此名称与Data records相同。

有多少字节的未回收删除数据。您可以优化 table 以最小化此空间。参见第 7.6.4 节“ MyISAMtable 优化”

数据文件指针的大小,以字节为单位。通常为 2、3、4 或 5 个字节。大多数 table 使用 2 个字节进行 Management,但这尚不能通过 MySQL 进行控制。对于固定 table,这是行地址。对于动态 table,这是一个字节地址。

索引文件指针的大小,以字节为单位。通常为 1、2 或 3 个字节。大多数 tableManagement2 个字节,但这是由 MySQL 自动计算的。它始终是一个块地址。

table 数据文件可以变为多长时间(以字节为单位)。

table 索引文件可以变成多长时间(以字节为单位)。

每行占用多少空间,以字节为单位。

输出的table description部分包括 table 中所有键的列 table。对于每个键,myisamchk显示一些底层信息:

此项的 Numbers。仅在键的第一列中显示此值。如果缺少此值,则该行对应于多列键的第二列或更高列。对于示例中显示的 table,第二个索引有两条table description行。这 table 明它是一个由两部分组成的 Multipart 索引。

索引的该部分在行中的何处开始。

这部分索引有多长时间。对于压缩数字,该数字应始终为列的全长。对于字符串,它可能比索引列的全长短,因为您可以索引字符串列的前缀。Multipart 键的总长度是所有键部分的Len值的总和。

键值是否可以在索引中多次存在。可能的值为uniquemultip.(多个)。

索引的此部分具有什么数据类型。这是MyISAM数据类型,可能的值为packedstrippedempty

根索引块的地址。

每个索引块的大小。默认情况下,它是 1024,但是当从源代码构建 MySQL 时,该值可以在编译时更改。

这是优化器使用的统计值。它告诉该索引每个值有多少行。唯一索引的值始终为 1.可以使用myisamchk -a将 table 加载(或大大更改)后进行更新。如果根本不更新,则默认值为 30.

输出的最后一部分提供有关每一列的信息:

列号。

table 格行中列的字节位置。

列的长度(以字节为单位)。

对于可以为NULL的列,MyISAMNULL值作为标志存储在字节中。根据有多少可空列,可以有一个或多个字节用于此目的。 NullposNullbit值(如果为非空),指示哪个字节和位包含 table 示该列是否为NULL的标志。

字段 1 的行中显示了用于存储NULL标志的位置和字节数。这就是为什么persontable 有六个Field行的原因,尽管它只有五列。

数据类型。该值可以包含以下任何 Descriptors:

所有行都具有相同的值。

不要存储空格。

不要存储所有空格,也不要对所有值进行空格压缩。

不要存储空格。不要存储空值。

该列已转换为ENUM

值中的最高有效* N *字节始终为 0,并且不存储。

不要存储零。

零值使用一位存储。

与列关联的霍夫曼树的编号。

霍夫曼树中使用的位数。

如果 table 已使用myisampack压缩,则显示Huff treeBits字段。有关此信息的示例,请参见第 4.6.5 节“ myisampack —生成压缩的只读 MyISAMtable”

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输出包含以下信息:

table 中的行数。

多少个删除的块仍具有保留空间。您可以优化 table 以最小化此空间。参见第 7.6.4 节“ MyISAMtable 优化”

密钥号。

使用了多少百分比的键块。当刚刚用myisamchk重组 table 时,值非常高(非常接近理论最大值)。

MySQL 尝试打包具有共同后缀的键值。仅可用于CHARVARCHAR列上的索引。对于具有最左部分相似的长索引字符串,这可以显着减少使用的空间。在前面的示例中,第二个密钥的长度为 40 个字节,并且空间减少了 97%。

此键的 B 树有多深。具有长键值的大型 table 将获得较高的值。

table 中有多少行。

平均行长。这是具有固定长度行的 table 的确切行长度,因为所有行的长度都相同。

MySQL 从字符串末尾去除空格。 Packed值 table 示通过执行此操作所节省的百分比。

使用了多少百分比的数据文件。

数据文件的未使用百分比。

每行的平均块数(即,一个分散的行由多少个链接组成)。对于固定格式的 table,该值始终为 1.0. 该值应保持尽可能接近 1.0. 如果它太大,则可以重新组织 table。参见第 7.6.4 节“ MyISAMtable 优化”

使用了多少个块(链接)。对于固定格式的 table,此数目与行数相同。

删除了多少个块(链接)。

数据文件中使用了多少字节。

删除(未使用)数据文件中的多少字节。

如果将一行更新为较短的长度,则会丢失一些空间。这是所有此类损失的总和,以字节为单位。

使用动态 table 格式时,行片段与指针链接(每个指针 4 到 7 个字节)。 Linkdata是所有此类指针使用的存储量的总和。

首页