2009-11-16 8 views
8

Estoy haciendo un montón de INSERT a través de LOAD DATA INFILE en MySQL 5.0. Después de muchas inserciones, digamos unos cientos de millones de filas (InnoDB, PK + un índice no exclusivo, 64 bit Linux, 4 GB de RAM, RAID 1), las inserciones se ralentizan considerablemente y aparecen vinculadas a IO. ¿Es probable que las particiones en MySQL 5.1 mejoren el rendimiento si los datos fluyen en tablas de particiones separadas?¿Las particiones mejorarán la velocidad de MySQL INSERT?

+0

Eso sin duda es una gran cantidad de filas. ¿Qué motor de mesa estás usando? MyISAM o InnoDB? – Asaph

+0

¿Tiene algún índice en esta tabla (porque ralentiza las inserciones)? – Asaph

+0

¿Qué sistema operativo? ¿Qué sistema de archivos? ¿Cuánta memoria tiene la caja? – Asaph

Respuesta

3

La respuesta anterior es errónea en su suposición de que esto disminuirá el rendimiento. Todo lo contrario.

Aquí hay un artículo muy largo, pero informativo y el por qué y cómo hacer la partición en MySQL:

http://dev.mysql.com/tech-resources/articles/partitioning.html

partición se utiliza normalmente, como se mencionó, al grupo como en datos juntos. De esta forma, cuando decides archivar o destruir una partición, tus tablas no se fragmentarán. Esto, sin embargo, no perjudica el rendimiento, de hecho puede aumentarlo. Mira, no solo son eliminaciones las fragmentaciones, las actualizaciones y las inserciones también pueden hacer eso. Al particionar los datos, le está dando al RDBMS los criterios (indeces) por los cuales los datos deben ser manipulados y consultados.

-5

Si las columnas INSERTAR comprobaciones (claves primarias, por ejemplo) están indexadas, entonces esto solo disminuirá la velocidad: MySQL tendrá que decidir adicionalmente sobre la partición.

Todas las consultas solo se mejoran al agregar índices. El particionamiento es útil cuando tienes toneladas de datos muy antiguos (por ejemplo, año < 2000) que rara vez se utilizan: entonces sería bueno crear una partición para esa información.

¡Salud!

+0

El rendimiento de todas las consultas no es ayudado por la indexación: el rendimiento de INSERT se ve afectado por la indexación. – nicolaskruchten

1

Editar: SiLent SoNG es correcto. LAS TECLAS DE DESACTIVAR/HABILITAR solo funcionan para MyISAM, no para InnoDB. Nunca lo supe, pero fui y leí los documentos. http://dev.mysql.com/doc/refman/5.1/en/alter-table.html#id1101502.

La actualización de cualquier índice puede ser lo que ralentiza. Puede desactivar los índices mientras realiza su actualización y volverlos a activar para que se puedan generar una vez para toda la tabla.

 
ALTER TABLE foo DISABLE KEYS; 
LOAD DATA INFILE ... ; 
ALTER TABLE ENABLE KEYS; 

Esto hará que todos los índices se actualicen de una vez en vez de por fila. Esto también conduce a índices BTREE más equilibrados.

+0

el asker ya ha mencionado InnoDb. desactivar las teclas y habilitar las claves no son compatibles con InnoDb. –

+0

@SiLent SoNG: Gracias, no sabía que era solo MyISAM. Publicación editada para reflejar – Slashterix

Cuestiones relacionadas