Actualmente estoy usando information_schema.TABLES para calcular el uso total de espacio en disco agrupado por el nombre de la base de datos, pero está funcionando muy lentamente. En servidores con cientos de bases de datos, puede tomar minutos calcular.
¿Cuál es el método más rápido para calcular el uso de espacio en disco por base de datos? ¿Debería estar mirando el sistema de archivos? ¿Hay algún método para acelerar el esquema de información?
Si está utilizando MyISAM, es más fácil simplemente mirar el sistema de archivos y usarlo du -sh /var/lib/mysql/database.
Si está usando InnoDB con innodb_file_per_table set, puede obtener una respuesta aproximada usando du -sh. Es aproximado porque todavía hay algunos datos almacenados en el archivo ibdata1, por lo que estará un poco en el lado bajo. Esta técnica también funciona con innodb_file_per_tablebases de datos mixtas MyISAM / InnoDB ( ).
Si está utilizando InnoDB sin él innodb_file_per_table set, entonces deberá consultar INFORMATION_SCHEMA.
En cualquiera de los casos anteriores, puede ejecutar la siguiente consulta para obtener la información que está buscando.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Si tiene una gran cantidad de tablas, puede ser lento, como ya lo ha descubierto.
Vi en otro lugar que la opción 3 no tiene en cuenta los tamaños de VARCHAR.
Joe
3
Puede usar este comando para obtener información en GB:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
El espacio se puede reclamar utilizando el comando OPTIMIZE TABLE para las tablas InnoDB, MyISAM y ARCHIVE.
Para poder ver dónde se está utilizando el espacio en disco (independientemente de si está en una tabla mysql o no), utilizo mi confiable comando "du". Aquí hay un ejemplo de mí encontrando de dónde se está comiendo todo el espacio.
Puede ver que esta carpeta está utilizando la mayor parte del espacio. / mysql
Esa carpeta contiene tablas de datos. Para ver qué tablas están ocupando todo el espacio, puede proceder así usando la opción "humano" o "-h". Me gusta administrar el espacio en disco de esta manera porque a veces ni siquiera puedes iniciar sesión en mysql porque no conoces la contraseña o el usuario.
Buscaría el tamaño del archivo en su diccionario de datos. Es instantáneo y preciso.
Advertencia : según el motor de almacenamiento, los índices se almacenan en el archivo principal o en otro archivo, no olvide resumirlos si es necesario.
Puede usar este comando para obtener información en GB:
Adaptado la respuesta de Aaron Brown para proporcionar tamaño en GB. Vea la respuesta de Aaron Brown para más detalles.
O para incluir espacio libre / recuperable, use:
El espacio se puede reclamar utilizando el comando OPTIMIZE TABLE para las tablas InnoDB, MyISAM y ARCHIVE.
Consulte también ¿Cómo obtener el tamaño real de la base de datos MySQL? para más detalles.
fuente
Para obtener información sobre el nombre de la tabla y el número de registros que tiene, se puede utilizar la siguiente consulta,
Para obtener información sobre bases de datos en los servidores con su tamaño respectivo, se puede utilizar la siguiente consulta,
fuente
Para poder ver dónde se está utilizando el espacio en disco (independientemente de si está en una tabla mysql o no), utilizo mi confiable comando "du". Aquí hay un ejemplo de mí encontrando de dónde se está comiendo todo el espacio.
Puede ver que esta carpeta está utilizando la mayor parte del espacio. / mysql
Esa carpeta contiene tablas de datos. Para ver qué tablas están ocupando todo el espacio, puede proceder así usando la opción "humano" o "-h". Me gusta administrar el espacio en disco de esta manera porque a veces ni siquiera puedes iniciar sesión en mysql porque no conoces la contraseña o el usuario.
Puede ver que todo el espacio está siendo acaparado por unas pocas tablas que contienen muchos GiG de datos. Espero que esto ayude.
fuente
Buscaría el tamaño del archivo en su diccionario de datos. Es instantáneo y preciso.
Advertencia : según el motor de almacenamiento, los índices se almacenan en el archivo principal o en otro archivo, no olvide resumirlos si es necesario.
fuente
Sé que esto es viejo, pero alguien puede encontrar esto relevante.
En MySQL yo uso:
Como mi DB es InnoDB, esto es solo una estimación.
Comparo esta salida con:
Espero que esto te ayude
fuente
Mejor (después de hacer
apt-get install ncdu
):para obtener todo el tamaño total de las bases de datos Mysql en su VPS.
fuente