MYSQL myisam使用keycache进行修复

时间:2011-02-16 15:43:11

标签: mysql myisam

我正在禁用密钥;批量加载数据;然后在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进行修复?

2 个答案:

答案 0 :(得分:3)

显然myisam_sort_buffer_size = 4G是不够的,我需要将其设置为10G,然后启用密钥将使用修复与排序。它让我感到困惑!

答案 1 :(得分:1)

对于其他发现此问题的人,我最近发现我的MySQL 5.1服务器不希望myisam_sort_buffer_size成为4G的完全倍数。我在主要的RAM升级之后发现了这一点,让我从Keycache进行修复。

我为myisam_sort_buffer_size测试了一个200MBENABLE KEYS,其值不同

4G - repair with keycache
5G - repair with sort
6G - repair with sort
7G - repair with sort
8G - repair with keycache

...

不确定4G倍数是否特定于我的配置,但需要注意的事项。花了很长时间才发现尝试设置为8G16G,甚至是64GB