2011-02-16 16 views
2

我正在禁用鍵;批量加載數據;然後在myisam表上重建索引。然而, 最後一部分需要永遠,因爲它是MYSQL myisam使用keycache修復

 
Repair with keycache  

,而不是維修的排序
這裏是我的變量,我有表約100萬條記錄,每行有一個整數主鍵,一個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     | 
+---------------------------+----------------------+ 

我的機器有8GB的內存和250GB的存儲空間,爲什麼不用MYSQL進行排序修復?

+0

可能的重複。看到MarkR的答案在這裏:http://stackoverflow.com/questions/1067367/mysql-how-to-avoid-repair-with-keycache – 2011-02-16 16:29:04

+0

我已經讀了另一個線程,它沒有幫助我。我在/ tmp中有足夠的磁盤空間,這是我的mysql正在使用的 – user121196 2011-02-16 16:39:07

回答

3

顯然myisam_sort_buffer_size = 4G是不夠的,我需要將它設置爲10G,然後啓用鍵將使用排序修復。它讓我感到困惑!

1

對於其他人發現此問題,我最近發現我的MySQL 5.1服務器不喜歡myisam_sort_buffer_size4G的確切倍數。我在一次主要的RAM升級後發現了這個問題,讓我從Keycache那裏得到修復。

我測試了200MBENABLE KEYS不同值myisam_sort_buffer_size

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

...

不知道,如果4G的多是具體到我的配置,但它的東西看出來的。花了很長時間才發現,嘗試設置爲8G16G,甚至64GB