Pregunta

He leído varias veces que después de eliminar una fila en una tabla InnoDB en MySQL, su espacio no se reutiliza, por lo que si realiza una gran cantidad de INSERTOS en una tabla y luego ELIMINA periódicamente algunas filas, la tabla usará más y más espacio en el disco, como si las filas no se hubieran eliminado en absoluto.

Recientemente me han dicho que el espacio ocupado por las filas eliminadas se reutiliza, pero solo después de que se completan algunas transacciones e incluso entonces, no completamente. Ahora estoy confundido.

¿Puede alguien entenderme esto? Necesito hacer un montón de INSERTs en una tabla InnoDB y luego cada X minutos necesito ELIMINAR registros que tengan más de Y minutos. ¿Tengo un problema con la creciente tabla de InnoDB aquí, o es paranoia?

¿Fue útil?

Solución

Es paranoia :)

Los DB no crecen de tamaño innecesariamente, pero por problemas de rendimiento tampoco se libera espacio.

Lo que probablemente ha escuchado es que si elimina registros, ese espacio no se devuelve al sistema operativo . En cambio, se mantiene como un espacio vacío para que la base de datos pueda reutilizarse después.

Esto es porque:

  • DB necesita tener espacio en HD para guardar sus datos; si no tiene espacio, al principio reserva un espacio vacío.
  • Cuando inserta una nueva fila, se utiliza una parte de ese espacio.
  • Cuando te quedas sin espacio libre, se reserva un nuevo bloque, y así sucesivamente.
  • Ahora, cuando elimina algunas filas , para evitar reservar más y más bloques, su espacio se mantiene libre pero nunca se devuelve al Sistema Operativo, por lo que puede usarlo nuevamente más tarde sin cualquier necesidad de reservar nuevos bloques.

Como puede ver, el espacio se reutiliza , pero nunca se devuelve. Ese es el punto clave de su pregunta.

Otros consejos

en innodb, no hay forma práctica de liberar el espacio.

Todos estos métodos se vuelven poco prácticos cuando se utilizan tablas enormes (en mi caso son más de 250 GB) y debe mantenerlos eliminando registros para un mejor rendimiento.

Tendrá que pensar seriamente, si tiene suficiente espacio en su disco duro para realizar una de las funciones anteriores (en mi caso, no creo que 1TB sea suficiente para todas estas acciones)

con la tabla Innotab (y mysql en sí) las opciones son bastante limitadas si tienen un tamaño de base de datos serio.

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