暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

4.6.4.6 myisamchk内存使用情况

原创 由迪 2020-12-01
403

运行myisamchk时,内存分配很重要 。myisamchk使用的内存不超过其与内存相关的变量所设置的数量。如果要在非常大的表上使用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 指向内存文件系统,则很容易发生内存不足错误。如果发生这种情况,请运行带有 选项的myisamchk, 以指定位于具有更多空间的文件系统上的目录。 --tmpdir=*dir_name*

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

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

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

  • 在使用--recover或时 --sort-recover(但在使用时则不是 --safe-recover),您需要磁盘上的空间用于排序。该空间在临时目录(由TMPDIR 或 指定)中分配。下面的公式得出所需的空间量: --tmpdir=*dir_name*

    (largest_key + row_pointer_length) * number_of_rows * 2
    

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

如果在修复过程中磁盘空间有问题,可以尝试使用 --safe-recover代替 --recover

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论