文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


6.6.4.6 myisamchk 内存使用

在运行 myisamchk 时,内存分配非常重要。 myisamchk 使用的内存不会超过其与内存相关的变量设置的值。如果您要在非常大的表上使用 myisamchk,您应该首先确定您希望它使用多少内存。默认情况下,它只使用大约 3MB 来执行修复。通过使用更大的值,您可以让 myisamchk 运行得更快。例如,如果您有超过 512MB 的可用 RAM,您可以使用以下选项(除了您可能指定的任何其他选项):

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

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

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

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

  • 数据文件大小的两倍(原始文件和副本)。如果您使用 --quick 执行修复,则不需要此空间;在这种情况下,只会重新创建索引文件。 此空间必须与原始数据文件位于同一文件系统中,因为副本是在与原始文件相同的目录中创建的。

  • 用于替换旧索引文件的新的索引文件空间。在修复操作开始时,旧的索引文件会被截断,因此您通常可以忽略此空间。此空间必须与原始数据文件位于同一文件系统中。

  • 当使用 --recover--sort-recover 时(但不使用 --safe-recover),您需要磁盘空间进行排序。此空间在临时目录(由 TMPDIR--tmpdir=dir_name 指定)中分配。以下公式得出所需的磁盘空间量

    (largest_key + row_pointer_length) * number_of_rows * 2

    您可以使用 myisamchk -dv tbl_name 检查键的长度和 row_pointer_length(参见 第 6.6.4.5 节,“使用 myisamchk 获取表信息”)。row_pointer_lengthnumber_of_rows 值分别是表描述中的 数据文件指针数据记录 值。要确定 largest_key 值,请检查表描述中的 Key 行。 Len 列表示每个键部分的字节数。对于多列索引,键大小是所有键部分的 Len 值之和。

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