2008-11-26 19 views
24

que estaba leyendo sobre refactorización una gran consultas SQL lenta a lo largo here, y la corriente de respuesta más alta es de Mitch trigo, que quiere asegurarse de que la consulta utiliza los índices de los principales selecciona, y menciona:¿Cuándo deberían reconstruirse los índices de la base de datos?

Lo primero Lo que haría es verificar que haya un trabajo de mantenimiento de índice activo que se ejecuta periódicamente. De lo contrario, obtenga todos los índices existentes reconstruidos o, si no es posible, al menos obtenga estadísticas actualizadas.

Soy solo un DBA aficionado, y he hecho algunos programas independientes que son básicamente clientes de escritorio Java y, en ocasiones, un back-end MySQL. Cuando configuro el sistema, sé que para crear un índice en las columnas que se consultarán, hay un CaseID varchar y un varchar CustName.

Sin embargo, configuré este sistema hace meses y dejé al cliente en funcionamiento, y creo que los índices deberían aumentar a medida que se ingresan datos y creo que todo sigue funcionando bien. Sin embargo, me preocupa que los índices se reconstruyan periódicamente, porque hoy he leído que debería haber un "trabajo de mantenimiento activo". El único trabajo de mantenimiento que preparé fue una copia de seguridad nocturna.

Quería preguntarle a la comunidad sobre el mantenimiento regular que una base de datos podría requerir. ¿Es necesario reconstruir índices? ¿Puedo confiar en que el back-end de MySQL continuará siempre y cuando nadie se meta con él y los datos se mantengan por debajo de unos pocos gigabytes?

Respuesta

24

No es necesario 'reconstruir' un índice. Siempre se mantienen actualizados. Tal vez se estaba refiriendo a la reconstrucción de la mesa. Dependiendo de sus patrones de uso y esquema, puede obtener páginas fragmentadas en InnoDB, y creo que en MyISAM también. Reconstruir la tabla puede mejorar el rendimiento al eliminar la fragmentación de sus datos en el disco. No utilizo tablas MyISAM regularmente, pero creo que se recomienda ejecutar 'OPTIMIZE TABLE' con ciertos patrones de uso. Consulte los documentos de MySQL en OPTIMIZE TABLE para obtener información acerca de MyISAM e InnoDB.

No estoy tan familiarizado con las complejidades de MyISAM, pero con InnoDB es cierto que las estadísticas pueden estar desactualizadas. La base de datos mantiene estadísticas estimadas sobre cómo se distribuyen sus datos para un índice dado, y es posible que se desactualicen, pero MySQL/InnoDB tiene algunas funciones incorporadas para tratar de mantener las estadísticas al día. Por lo general, no tiene que preocuparse por eso.

Si está utilizando InnoDB, la respuesta es no, normalmente no necesita hacer nada activamente para mantener sus índices funcionando bien. No estoy tan seguro con MyISAM, creo que es más común tener que optimizar esas tablas regularmente.

+1

Desde su enlace: "OPTIMIZE TABLE debe usarse si ha borrado una gran parte de una tabla o si ha realizado muchos cambios en una tabla con filas de longitud variable" Parece que debería ejecutar OPTIMIZE solo si ha habido un cambio significativo cambios estructurales. Gracias, parece que no es necesario. – Karl

11

Por lo general, es una buena idea configurar un cronjob para optimizar los índices y comprobar si hay errores.

Ver mysqlcheck. Un trabajo cron típico se parece a mysqlcheck -Aaos, que comprueba todas las tablas en todas las bases de datos en busca de errores, optimiza los índices y solo produce errores.

+0

No tengo acceso a la máquina sin molestar al cliente y asustarlo para que piense que podría haber un problema. Conozco el patrón de uso y busco información sobre cuándo se necesita la optimización. – Karl

+0

Entonces, ¿sinceramente? No lo sudaría. – Eli

2

La respuesta a la que se vinculó con respecto al "mantenimiento regular" fue en el contexto específico de una tabla temporal que se trunca y se vuelve a llenar periódicamente. No necesita hacer esto en la gran mayoría de las instalaciones de bases de datos MySQL.

Cuestiones relacionadas