#### 4.6.4.6 myisamchk 内存使用

[](<>)

运行时内存分配很重要[**迈萨姆奇克**](myisamchk.html).[**迈萨姆奇克**](myisamchk.html)使用的内存不超过其内存相关变量设置的值。如果你要使用[**迈萨姆奇克**](myisamchk.html)在非常大的表上，您应该首先决定要使用多少内存。默认情况下仅使用大约 3MB 来执行修复。通过使用更大的值，您可以获得[**迈萨姆奇克**](myisamchk.html)更快地运行。例如，如果您有超过 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.html)使用临时文件`TMPDIR`.如果`TMPDIR`指向一个内存文件系统，很容易出现内存不足的错误。如果发生这种情况，运行[**迈萨姆奇克**](myisamchk.html)与[`--tmpdir=*`目录名`*`](myisamchk-repair-options.html#option_myisamchk_tmpdir)用于指定位于具有更多空间的文件系统上的目录的选项。

进行维修操作时，[**迈萨姆奇克**](myisamchk.html)还需要大量磁盘空间：

-   数据文件大小的两倍（原始文件和副本）。如果您进行修复，则不需要此空间[`- 快的`](myisamchk-repair-options.html#option_myisamchk_quick);在这种情况下，仅重新创建索引文件。*此空间必须在与原始数据文件相同的文件系统上可用*，因为副本是在与原始目录相同的目录中创建的。

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

-   使用时[`- 恢复`](myisamchk-repair-options.html#option_myisamchk_recover)要么[`--排序恢复`](myisamchk-repair-options.html#option_myisamchk_sort-recover)（但不是在使用时[`--安全恢复`](myisamchk-repair-options.html#option_myisamchk_safe-recover))，您需要磁盘空间进行排序。该空间分配在临时目录中（由`TMPDIR`要么[`--tmpdir=*`目录名`*`](myisamchk-repair-options.html#option_myisamchk_tmpdir)）。以下公式得出所需的空间量：

    ```
    (largest_key + row_pointer_length) * number_of_rows * 2
    ```

    您可以检查密钥的长度和*`行指针长度`*和[**myisamchk -dv*`tbl_name`***](myisamchk.html)（看[第 4.6.4.5 节，“使用 myisamchk 获取表信息”](myisamchk-table-info.html)）。这*`行指针长度`*和*`number_of_rows`*价值观是`数据文件指针`和`数据记录`表描述中的值。确定*`最大键`*值，检查`钥匙`表描述中的行。这`伦`列表示每个关键部分的字节数。对于多列索引，键大小是`伦`所有关键部分的值。

    如果修复过程中出现磁盘空间问题，可以试试[`--安全恢复`](myisamchk-repair-options.html#option_myisamchk_safe-recover)代替[`- 恢复`](myisamchk-repair-options.html#option_myisamchk_recover).
