Pregunta

Tengo una tabla de memoria en MySQL para un chat en vivo (tal vez este no es el mejor tipo de tabla para esto?), Y eliminar filas cada noche para mantener el registro en el chat causa manejable por encima en la tabla. Sin embargo, ya no se puede ejecutar en una mesa OPTIMIZAR LA MEMORIA, ¿cómo deshacerse de los gastos generales (Data_free en el show table status)?

¿Fue útil?

Solución

¿cómo deshacerse de los gastos generales?

Se puede obligar a una tabla utilizando el motor de almacenamiento MEMORY / pila para recuperar espacio residual perdido de filas eliminadas mediante la alteración de ella, pero no cambiar nada. por ejemplo.

ALTER TABLE my_table ENGINE=MEMORY;

Se re-escribir la tabla. Copia de seguridad que hasta con una cita de la documentación :

Para liberar la memoria utilizada por filas que han sido eliminados, utilice ALTER TABLA DEL MOTOR = MEMORIA para forzar una mesa reconstruir.

Editar

Tal vez este no es el mejor tipo de tabla para esto?

No suena como la aplicación ideal de una tabla de memoria en mi opinión - por lo general, considero que es un motor de legado. Algunos alimentos por el pensamiento

En primer lugar, las tablas de memoria puede no / no usan índices de árbol B (sólo índices hash), por lo que las consultas que podrían utilizar un índice de ordenar o van (es decir, <,> operaciones) recurren a la clasificación / filtrado de forma manual /exhaustivamente.

En segundo lugar, las tablas InnoDB residen en la memoria RAM si su innodb_buffer_pool es lo suficientemente grande, y funciona mejor con hilos concurrentes, lo que a menudo realiza tan bueno si no mejor que una tabla MEMORY para la mayoría de aplicaciones.

En tercer lugar, quizás lo más importante, si su MySQL está siempre apagado, si no se pierden todos los datos de la tabla. Hay implicaciones truncamiento de tabla también si está utilizando la replicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top