运行时,内存分配非常重要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 = 16 m
对于大多数情况来说可能已经足够了。
请注意myisamchk使用临时文件TMPDIR
.如果TMPDIR
对于一个内存文件系统,很容易发生内存不足的错误。如果发生这种情况,快跑myisamchk与——tmpdir =
选项,指定位于具有更大空间的文件系统上的目录。dir_name
在进行维修操作时,myisamchk也需要大量的磁盘空间:
数据文件大小的两倍(原始文件和副本)。如果使用。进行修复,则不需要此空间
——快速
;在这种情况下,只重新创建索引文件。此空间必须在与原始数据文件相同的文件系统上可用,因为副本是在与原始文件相同的目录中创建的。替换旧索引文件的新索引文件的空间。旧的索引文件在修复操作开始时被截断,因此通常忽略这个空格。此空间必须在与原始数据文件相同的文件系统上可用。
当使用
——恢复
或——sort-recover
(但在使用时不是这样——safe-recover
),你需要磁盘上的空间来排序。此空间分配在临时目录(由TMPDIR
或——tmpdir =
).所需的空间大小如下公式所示:dir_name
(largest_key+row_pointer_length) *number_of_rows* 2
你可以检查钥匙的长度和
row_pointer_length
与myisamchk dvtbl_name
(见第4.6.4.5节“使用myisamchk获取表信息”).的row_pointer_length
而且number_of_rows
值是数据文件指针
而且数据记录
表描述中的值。要确定largest_key
值,检查关键
表描述中的行。的Len
列表示每个关键部分的字节数。对于多列索引,键大小为Len
所有关键部件的值。
如果在修复期间遇到磁盘空间问题,可以尝试——safe-recover
而不是——恢复
.