我正在禁用密钥;批量加载数据;然后在myisam表上重新构建索引。然而, 最后一部分需要永远,因为它是
Repair with keycache
而不是按类别修复 这是我的变量,我在表中有大约1亿条记录,每行有一个整数主键,一个smallint列和一个varchar(256)列。我的myisam_max_sort_file_size是500G,我怀疑索引的最大尺寸是否接近那个。
mysql> show variables where variable_name like '%myisam%'; +---------------------------+----------------------+ | Variable_name | Value | +---------------------------+----------------------+ | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 536870912000 | | myisam_mmap_size | 18446744073709551615 | | myisam_recover_options | OFF | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 4294967296 | | myisam_stats_method | nulls_unequal | | myisam_use_mmap | OFF | +---------------------------+----------------------+
我的盒子有8 GB的RAM和250GB的存储空间,为什么MYSQL不能使用sort进行修复?
答案 0 :(得分:3)
答案 1 :(得分:1)
对于其他发现此问题的人,我最近发现我的MySQL 5.1
服务器不希望myisam_sort_buffer_size
成为4G
的完全倍数。我在主要的RAM升级之后发现了这一点,让我从Keycache进行修复。
我为myisam_sort_buffer_size测试了一个200MB
表ENABLE KEYS
,其值不同
4G - repair with keycache
5G - repair with sort
6G - repair with sort
7G - repair with sort
8G - repair with keycache
...
不确定4G倍数是否特定于我的配置,但需要注意的事项。花了很长时间才发现尝试设置为8G
,16G
,甚至是64GB
。