2012-04-12 18 views
5

Około 2 miesiące temu zaimportowałem dane do EnWikipedia (http://dumps.wikimedia.org/enwiki/20120211/) do mysql.Tworzenie indeksu trwa zbyt długo

Po zakończeniu importowania danych EnWikipedia przez około 2 miesiące tworzyłem indeks w tabelach bazy danych EnWikipedia w mysql.

Teraz osiągnąłem punkt tworzenia indeksu w "linkach do stron".

Jednak wydaje się, że upłynięcie tego momentu zajmuje nieskończenie wiele czasu.

Dlatego sprawdziłem czas pozostały do ​​przejścia, aby upewnić się, że moja intuicja była poprawna lub nie.

W rezultacie, czas przewidywany pozostający wynosił 60 dni (przy założeniu, że tworzę indeks „pagelinks” jeszcze raz od początku.)

My EnWikipedia database has 7 tables: 
"categorylinks"(records: 60 mil, size: 23.5 GiB), 
"langlinks"(records: 15 mil, size: 1.5 GiB), 
"page"(records: 26 mil, size 4.9 GiB), 
"pagelinks"(records: 630 mil, size: 56.4 GiB), 
"redirect"(records: 6 mil, size: 327.8 MiB), 
"revision"(records: 26 mil, size: 4.6 GiB) and "text"(records: 26 mil, size: 60.8 GiB). 

Mój serwer jest ... wersji Linux 2.6.32 -5-amd64 (Debian 2.6.32-39), Pamięć 16 GB, Intel Core 2.39Ghz

Czy to powszechne zjawisko w tworzeniu indeksu tak długich dni? Czy ktoś ma dobre rozwiązanie, aby szybciej utworzyć indeks?

Z góry dziękuję!


P.S: Wykonałem następujące operacje dla sprawdzenia pozostałego czasu.

Odniesienia (Niestety, strona nie jest napisana w języku japońskim): http://d.hatena.ne.jp/sh2/20110615

1st. Mam zapisy w "pagelink".

mysql> select count(*) from pagelinks; 
+-----------+ 
| count(*) | 
+-----------+ 
| 632047759 | 
+-----------+ 
1 row in set (1 hour 25 min 26.18 sec) 

2nd. Dostałem ilość rekordów zwiększoną na minutę.

getHandler_write.sh

#!/bin/bash 

while true 
do 
    cat <<_EOF_ 
SHOW GLOBAL STATUS LIKE 'Handler_write'; 
_EOF_ 
    sleep 60 
done | mysql -u root -p -N 

komenda

$ sh getHandler_write.sh 
Enter password: 
Handler_write 1289808074 
Handler_write 1289814597 
Handler_write 1289822748 
Handler_write 1289829789 
Handler_write 1289836322 
Handler_write 1289844916 
Handler_write 1289852226 

3rd. Obliczyłem prędkość nagrywania.

Według wyniku 2., prędkość zapisu jest

7233 records/minutes 

4-ty. Następnie pozostały czas jest

(632047759/7233)/60/24 = 60 days 
+0

możliwy duplikat http : //stackoverflow.com/questions/2167522/innodb-takes-over-an-hour-to-import-600mb-file-myisam-in-a-few-minutes – SunKing2

+3

Teraz to nazywam cierpliwością. Szacunek – fancyPants

Odpowiedz

6

Są dość duże stoły, więc będę oczekiwać indeksowanie być dość powolny. 630 milionów rekordów to DUŻO danych do zindeksowania. Jedną rzeczą, na którą należy zwrócić uwagę, jest partycjonowanie, przy dużych zbiorach danych, bez prawidłowo podzielonych tabel, wydajność będzie sloooow.Oto kilka przydatnych linków: using partioning on slow indexes możesz również spróbować spojrzeć na ustawienia rozmiaru bufora do budowania indeksów (domyślnie jest to 8 MB, zrób dla twojego dużego stołu, który będzie cię spowalniał.) buffer size documentation

+0

Dziękuję za twoją radę. Zapoznam się z moimi ustawieniami. –

Powiązane problemy