6.6.4.6 myisamlog — 显示 MyISAM 日志文件内容
内存分配对运行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可能足以满足大多数情况。
请注意,myisamchk 使用临时文件在 TMPDIR 中。如果 TMPDIR 指向内存文件系统,可能会出现内存错误。如果发生这种情况,请使用myisamchk 命令时指定 --tmpdir= 选项,以指定一个位于文件系统的目录,该文件系统具有更多空间。dir_名
在执行修复操作时,myisamchk 也需要大量磁盘空间:
-
数据文件的两倍大小(原始文件和副本)。如果您使用
--quick选项执行修复操作,那么只需重新创建索引文件;在这种情况下,不需要额外的空间。 这部分空间必须位于原始数据文件所在的同一个文件系统中,因为副本是在原始文件目录中的。 -
用于替换旧索引文件的新索引文件空间。修复操作开始时,旧索引文件将被截断,因此您通常可以忽略这部分空间。这部分空间必须位于原始数据文件所在的同一个文件系统中。
-
使用
--recover或--sort-recover(但不使用--safe-recover),您需要磁盘空间用于排序。这部分空间将在临时目录(由TMPDIR或--tmpdir=指定)中分配。以下公式计算所需空间的大小:dir_name(largest_key + row_pointer_length) * number_of_rows * 2您可以使用myisamchk -dv
tbl_name(见第6.6.4.5节,“使用 myisamchk 获取表信息”)检查键的长度和row_pointer_length。row_pointer_length和number_of_rows值是表描述中的Datafile 指针和Data 记录值。要确定largest_key值,请检查表描述中的Key行。Len列表示每个键部分的字节数。在多列索引中,键大小是所有键部分Len值之和。
如果在修复过程中遇到磁盘空间问题,可以尝试使用--safe-recover而不是--recover。