¿Cómo obtener el tamaño verdadero de la base de datos MySQL?

144

Me gustaría saber cuánto espacio usa mi base de datos MySQL para seleccionar un servidor web. Encontré el comando, SHOW TABLE STATUS LIKE 'table_name'así que cuando hago la consulta, obtengo algo como esto:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • Los números son redondeados.

Entonces, ¿tengo 362000 o 400 * 362000 = 144800000 bytes de datos para esta tabla? ¿Y qué significa Index Length? Gracias !

marvin
fuente
tienes 362000 + 66560. Data_Length + Index Length
mandza
Esta página le dará la respuesta exacta rathishkumar.in/2017/12/…
Rathish

Respuestas:

281

De S. Prakash, encontrado en el foro MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

O en una sola línea para copiar y pegar más fácilmente:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 
ron_dobley
fuente
77
¿Qué significa el espacio libre en MB? Tengo cientos de GB gratis pero informa menos de 1 GB gratis.
Barth
1
@Barth según la documentación significa "espacio libre en bytes para tablas InnoDB". Desafortunadamente no hay explicación de lo que eso significa: - \
ckujau
13
El espacio libre en bytes significa exactamente eso: significa que se puede reclamar la cantidad de espacio si OPTIMIZA la tabla o la reconstruye desde cero. Cuando las bases de datos almacenan información en discos, la asignan en bloques; eliminar un registro a menudo libera un bloque entre los bloques usados, y es muy costoso cambiar todos los otros bloques para usar ese espacio hacia arriba, de modo que esté marcado como "libre". El espacio puede ser utilizado posteriormente por el propio motor de la base de datos, o puede ser reclamado usando OPTIMIZE TABLE foo(MyISAM), o recrear + analizar para tablas InnoDB.
Razzed
92

Puede obtener el tamaño de su base de datos Mysql ejecutando el siguiente comando en el cliente Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
minhas23
fuente
30

Si usa phpMyAdmin, puede proporcionarle esta información.

Simplemente vaya a "Bases de datos" (menú en la parte superior) y haga clic en "Habilitar estadísticas".

Verás algo como esto:

Captura de pantalla de phpMyAdmin

Esto probablemente perderá algo de precisión a medida que aumenten los tamaños, pero debería ser lo suficientemente preciso para sus propósitos.

Radu Murzea
fuente
Actualmente estoy usando 000webhost. Tiene phpMyAdmin pero no pude encontrar una casilla de verificación "habilitar estadísticas". ¿Hay (tal vez) una consulta para eso?
marvin
1
@marvin Bueno, es posible que el webhost tenga instalada una versión anterior de phpMyAdmin. No sé en qué versión se introdujo esta característica.
Radu Murzea
En su barra lateral, haga clic en el icono de Inicio en la parte superior que lo lleva a la página de inicio. Allí, en la ventana derecha, haga clic en 'Bases de datos'. Muestra una tabla de una columna de bases de datos, debajo de eso hay un enlace llamado 'Habilitar estadísticas'
VeeK
8

si quieres encontrarlo en MB haz esto

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 
jakson
fuente
El fragmento de SQL de esta respuesta parece ser una copia de stackoverflow.com/a/1733523/1200542
Ariel Allon
3

Básicamente hay dos formas: consultar DB (longitud de datos + longitud de índice) o verificar el tamaño de los archivos. La longitud del índice está relacionada con los datos almacenados en los índices.

Todo se describe aquí:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

MiGro
fuente
Bueno, esta página es la fuente de mi pregunta. Pero de acuerdo con esta consulta, tengo 0.5 MB, lo que me deja bastante seguro. Espero que sea verdad :) ¡Gracias!
marvin
0

Ninguna de las respuestas incluye el tamaño general y los tamaños de metadatos de las tablas.

Aquí hay una estimación más precisa del "espacio en disco" asignado por una base de datos.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Semra
fuente
55
¿Podrías dar más detalles? Especialmente tus constantes 300y 150?
Melebius
Por favor, ¿podrías dar más detalles?
Allan Andrade
0

SUM(Data_free) Puede o no ser válido . Depende de la historia de innodb_file_per_table. Más discusión se encuentra aquí .

Rick James
fuente
0

Si está utilizando MySql Workbench, es muy fácil obtener todos los detalles del tamaño de la base de datos, el tamaño de cada tabla, el tamaño del índice, etc.

  1. Haga clic derecho en el esquema
  2. Seleccione la opción Inspector de esquema

    ingrese la descripción de la imagen aquí

  3. Muestra todos los detalles del tamaño del esquema

  4. Seleccione la pestaña Tablas para ver el tamaño de cada tabla.

    ingrese la descripción de la imagen aquí

  5. Tamaño de tabla desplegado en la columna Longitud de datos

Viraj Dhamal
fuente
0

Si desea encontrar el tamaño de todas las bases de datos MySQL, use este comando, que mostrará sus tamaños respectivos en megabytes;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Si tiene grandes bases de datos, puede usar el siguiente comando para mostrar el resultado en gigabytes;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Si desea mostrar el tamaño de una base de datos específica, por ejemplo YOUR_DATABASE_NAME, puede usar la siguiente consulta;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Arbab Nazar
fuente