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
。