8

我有一个使用 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 与 sort_buffer_size的答案表明增加该值永远没有意义)。该机器具有 32GB 的 RAM。

4

2 回答 2

5

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

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

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

于 2015-03-31T21:48:50.640 回答
1

如果您正在离线处理 100GB 数据。通过将数据拆分为单独的表来创建批处理表,每个表都有几百万个数据,并具有适当的索引和数据库引擎作为 innodb。

如果您在实时应用程序中在线使用这些数据,请参阅以下有关管理庞大数据量的链接。 什么数据库适用于 200+GB 的数据?

于 2014-08-21T17:43:15.013 回答