4.6.3.6 myisamchk 内存使用情况

运行myisamchk时,内存分配很重要。 myisamchk使用的内存不超过其与内存相关的变量所设置的数量。如果要在非常大的 table 上使用myisamchk,则应首先确定要使用的内存量。默认设置是仅使用约 3MB 进行修复。通过使用较大的值,您可以使myisamchk更快地运行。例如,如果您有超过 512MB 的可用 RAM,则可以使用这些选项(除了可能指定的其他选项之外):

shell> myisamchk --myisam_sort_buffer_size=256M \
           --key_buffer_size=512M \
           --read_buffer_size=64M \
           --write_buffer_size=64M ...

在大多数情况下,使用--myisam_sort_buffer_size=16M就足够了。

请注意,myisamchk使用TMPDIR中的临时文件。如果TMPDIR指向内存文件系统,则很容易发生内存不足错误。如果发生这种情况,请使用--tmpdir=dir_name选项运行myisamchk以指定位于文件系统上具有更多空间的目录。

进行修复操作时,myisamchk还需要大量磁盘空间:

(largest_key + row_pointer_length) * number_of_rows * 2

您可以使用myisamchk -dv tbl_name检查键的长度和* row_pointer_length *(请参阅第 4.6.3.5 节“使用 myisamchk 获取 table 信息”)。 * row_pointer_length number_of_rows 值是 table 说明中的Datafile pointerData records值。要确定 largest_key *值,请检查 table 描述中的Key行。 Len列指示每个关键部分的字节数。对于多列索引,键大小是所有键部分的Len值的总和。

如果在修复过程中磁盘空间有问题,可以尝试--safe-recover而不是--recover

首页