should repaired marked error crashed and mysql optimization

repaired - optimizar y comprobar mesa mysql



table is marked as crashed and should be repaired mysql (3)

2000 mesas y 100 millones de filas cada una parece enorme! Si intenta optimizar cada tabla varias veces a la semana, durante la optimización, las tablas se bloquearán, por lo que no podrá escribir esas tablas hasta que finalice el trabajo. Aquí hay un script que verifica solo las tablas fragmentadas (% 60 de sus tablas probablemente) y optimice solo los fragmentados, déjenos saber si funciona.

Nota: No pude probar el script ya que uso Windows Machine para mi proyecto actual. Lea los comentarios y las notas debajo del script para el enlace que proporcioné

Optimizar solo tablas fragmentadas en MySQL

Tengo una base de datos utilizada para las estadísticas, con más de 2000 tablas, cada una con ~ 100 millones de filas.

Creo que unas cuantas veces a la semana sería bueno revisar las mesas para asegurarse de que estén sanas, y si no, repararlas y optimizarlas.

El 60% de las tablas se actualizan todos los días, y el resto son archivos.

Mi pregunta es acerca de check(repair)/optimize : ¿es bueno verificar el estado de la mesa y optimizarlas varias veces a la semana para asegurar que el sistema funcione sin problemas?


En general, necesita OPTIMIZAR la tabla cuando su archivo de datos está demasiado fragmentado en el disco (use herramientas para que su sistema de archivos lo compruebe: el script vinculado por GiantRobot no está calculando la fragmentación), cuando había muchas filas actualizadas y su tamaño había cambiado (eso crearía una fila fragmentación) o después de eliminar muchos registros cuando no los volverá a agregar pronto. Debido a que MySQL usa el espacio libre para las nuevas filas, cuando los registros eliminados y nuevos tienen el mismo tamaño de fila, no se necesita OPTIMIZAR.

CHECK TABLE se usa solo cuando sospecha que la corrupción de los datos (que no debería ocurrir durante la ejecución normal). Algunas distribuciones de Linux (por ejemplo, Debian) tienen scripts de inicio que ejecutan CHECK TABLE para todas las tablas en el inicio del servidor MySQL. La TABLA DE REPARACIÓN se utiliza para reparar las tablas dañadas.

ANALYZE TABLE se puede usar para actualizar la cardinalidad del índice, que se usa para determinar el plan de ejecución de la consulta. Por lo general, se necesita sólo en casos especiales.

De su pregunta no queda claro cómo se utilizan sus tablas de estadísticas ... ¿cuántas escrituras, eliminaciones y lecturas? Mis tablas de estadísticas tienen escrituras todo el tiempo, y una vez al día se leen, los datos se consolidan y se escriben en otra tabla, luego se eliminan. En tal caso, no es necesario ejecutar OPTIMIZAR, ya que los datos no se leen con frecuencia y el espacio libre se reutiliza para nuevos datos. Estoy usando la partición por día, así que en lugar de eliminar los registros (lo cual es bastante lento) simplemente dejo caer la PARTICIÓN (que lleva 1 seg. Máximo).


La reparación es muy lenta con mesas grandes; Probablemente debería evitar tablas muy grandes, especialmente con muchos índices, con MyISAM. Prefiere particionarlos en lugar de reducir los tiempos de reparación. Esto puede requerir un cambio importante en el código de su aplicación.

También puedes ver problemas con la reparación here