En MySQL, ¿qué significa "Overhead", qué tiene de malo y cómo solucionarlo?

157

pregunta simple, pero me ha estado molestando por un tiempo ...

¿Qué es "gastos generales" en MySQL, y debería estar preocupado?

¿haciendo clic en "optimizar tabla" lo arregla de verdad?

johnnietheblack
fuente

Respuestas:

147

Parece que la sobrecarga es un espacio de disco temporal que la base de datos usó para ejecutar algunas de las consultas, por lo que solo debe preocuparse si esto es realmente alto.

Puede comparar 'Optimización de la tabla' con la desfragmentación de su disco duro.

Yo cito:

Con el tiempo, cada base de datos requerirá algún tipo de mantenimiento para mantenerla en un nivel de rendimiento óptimo . Purgar filas eliminadas, volver a secuenciar, comprimir, administrar rutas de índice, desfragmentar, etc. es lo que se conoce como OPTIMIZACIÓN en mysql y otros términos en otras bases de datos. Por ejemplo, IBM DB2 / 400 lo llama REORGANIZAR MIEMBRO DE ARCHIVO FÍSICO.

Es como cambiar el aceite de su automóvil o hacer una puesta a punto. Puede pensar que realmente no tiene que hacerlo, pero al hacerlo, su automóvil funciona mucho mejor, obtiene un mejor rendimiento de combustible, etc. Un automóvil que obtiene mucho kilometraje requiere afinaciones más a menudo. Una base de datos que se usa mucho requiere lo mismo. Si está realizando muchas operaciones de ACTUALIZACIÓN y / o ELIMINACIÓN, y especialmente si sus tablas tienen columnas de longitud variable (VARCHAR, TEXTO, etc.), debe mantenerse al día.

Jaspe
fuente
1
@Jasper ¿Están las tablas completamente bloqueadas (no se puede leer / escribir) durante la duración de la optimización?
Pacerier
44
¿De dónde se originó esa cita? Estoy encontrando muchos resultados en Google.
Ian Hunter
¿Cómo sabemos qué causa la sobrecarga una y otra vez?
mahen3d
gracias por un ejemplo perfecto y fácil, independientemente de los malditos términos técnicos.
shyammakwana.me 01 de
1
¿Qué se considera "realmente alto"?
TV-C-15
87

Si está hablando de lo que phpMyAdminllama overhead, entonces es el tamaño real de un archivo de datos de tabla en relación con el tamaño ideal del mismo archivo de datos (como si se acabara de restaurar desde la copia de seguridad).

Por razones de rendimiento, MySQLno compacta los archivos de datos después de eliminar o actualizar filas.

Esto overheades malo para el escaneo de tablas, es decir, cuando su consulta necesita ejecutarse sobre todos los valores de la tabla, tendrá que buscar más espacio vacío.

Puede deshacerse de la overheadejecución OPTIMIZE TABLEque compactará su tabla e índices.

Quassnoi
fuente
77
El tamaño de la documentación de mysql dice "OPTIMIZE TABLE debe usarse si ha eliminado una gran parte de una tabla o si ha realizado muchos cambios en una tabla con filas de longitud variable", este es mi caso, gracias :)
boclodoa
8

Overhead es Data_free de una tabla, es decir, el número de bytes asignados pero no utilizados. Podemos encontrarlo mediante el comando SQL SHOW TABLE STATUS . Es el espacio libre en el tamaño asignado para su mesa.

Shankar Prakash G
fuente
1

Optimizar tabla puede ser muy problemático. Por ejemplo, si la tabla se usa mucho en un sitio.

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

Después de eliminar una gran parte de una tabla MyISAM o ARCHIVE, o realizar muchos cambios en una tabla MyISAM o ARCHIVE con filas de longitud variable (tablas que tienen columnas VARCHAR, VARBINARY, BLOB o TEXT). Las filas eliminadas se mantienen en una lista vinculada y las operaciones INSERT posteriores reutilizan las posiciones de fila anteriores. <

Creo que he confirmado este comportamiento. Y ciertamente sería muy útil de hecho.

Thomas Lindegaard Jensen
fuente