我有一个使用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方法,而不是排序方法)。
在这种情况下增加myisam_sort_buffer_size没有意义(myisam_sort_buffer_size vs sort_buffer_size的答案表明增加值永远不会有意义)。这台机器有32GB的RAM。
答案 0 :(得分:3)
你只需要增加myisamchk的排序缓冲区大小。
myisamchk -r -q TABLE.MYI --sort_buffer_size=2G
在此处找到:https://ma.ttias.be/mysql-myisamchk-error-myisam_sort_buffer_size-is-too-small/
答案 1 :(得分:1)
如果您正在离线处理100GB数据。通过将数据拆分为单独的表来创建批处理表,每个表都有数百万个数据,并使用适当的索引和数据库引擎作为innodb。
如果您在实时应用程序中在线使用这些数据,请参阅以下有关管理大量数据的链接。 What database works well with 200+GB of data?