2012-04-12 17 views
5

Hace aproximadamente 2 meses, importé datos de EnWikipedia (http://dumps.wikimedia.org/enwiki/20120211/) en mysql.Crear índice lleva demasiado tiempo

Después de haber terminado de importar datos de EnWikipedia, he estado creando índices en las tablas de la base de datos de EnWikipedia en mysql durante aproximadamente 2 meses.

Ahora, he llegado al punto de crear un índice en "enlaces de página".

Sin embargo, parece tomar un tiempo infinito para pasar ese punto.

Por lo tanto, verifiqué el tiempo restante para asegurarme de que mi intuición era correcta o no.

Como resultado, el tiempo de espera restante fue de 60 días (suponiendo que creo índice en "pagelinks" de nuevo desde el principio.)

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). 

Mi servidor es ... versión 2.6.32 de Linux -5-amd64 (Debian 2.6.32-39), Memoria 16GB, 2.39Ghz Intel 4 core

¿Es ese fenómeno común para crear índices tan largos? ¿Alguien tiene una buena solución para crear índices más rápidamente?

¡Gracias de antemano!


P.S: Realicé las siguientes operaciones para verificar el tiempo restante.

Referencias (Lo sentimos, la página siguiente se escribe en japonés): http://d.hatena.ne.jp/sh2/20110615

1er. Obtuve registros en "pagelink".

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

segundo. Obtuve la cantidad de registros aumentados por minuto.

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 

comando

$ 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 

tercero. Calculé la velocidad de grabación.

De acuerdo con el resultado de 2, la velocidad de grabación es

7233 records/minutes 

cuarto. A continuación, el tiempo restante es

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

posible duplicado de http : //stackoverflow.com/questions/2167522/innodb-takes-over-an-hour-to-import-600mb-file-myisam-in-a-few-minutes – SunKing2

+3

Ahora ESO es lo que llamo paciencia. Respeto. – fancyPants

Respuesta

6

Esos son bastante grandes mesas, así que esperaría que la indexación a ser bastante lento. 630 millones de registros son MUCHOS datos para indexar. Una cosa a tener en cuenta es la partición, con conjuntos de datos tan grandes, sin tablas correctamente particionadas, el rendimiento será lento.Aquí hay algunos enlaces útiles: using partioning on slow indexes También podría intentar mirar la configuración del tamaño del búfer para construir los índices (el valor predeterminado es 8MB, para su tabla grande que va a ralentizar bastante) buffer size documentation

+0

Gracias por su consejo. Revisaré mi configuración. –

Cuestiones relacionadas