我有一个使用MyISAM引擎的MySQL表,其中包含6个INT列,1个SMALLINT,2个TINYINT和1个FLOAT列。
它具有数十亿行(数据文件为100GB)。我试图通过启用键在所有列上建立索引,但这从未发生。尝试“myisamchk -r tableName”给出以下错误:

- recovering (with sort) MyISAM-table 'tableName'
Data records: 662929483
- Fixing index 1
myisamchk: error: myisam_sort_buffer_size is too small
MyISAM-table 'tableName' is not fixed because of errors
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag

使用“myisamchk -rov tableName”会再次花费很多时间(大概是因为它使用的是keycache方法,而不是sort方法)。

在这种情况下,增加myisam_sort_buffer_size是否没有道理(对myisam_sort_buffer_size vs sort_buffer_size的回答表明,增加该值永远没有道理)。 native 具有32GB的RAM。

最佳答案

您只需要增加myisamchk的排序缓冲区大小即可。

 myisamchk -r -q TABLE.MYI --sort_buffer_size=2G

在这里找到它:https://ma.ttias.be/mysql-myisamchk-error-myisam_sort_buffer_size-is-too-small/

关于mysql - 大表修复/索引编制和myisam_sort_buffer_size,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12836002/

10-10 11:50