2011-06-24 98 views
137

¿Existe una manera rápida de determinar cuánto espacio en disco está ocupando una tabla MySQL en particular? La tabla puede ser MyISAM o Innodb.¿Cómo se puede determinar cuánto espacio en disco está ocupando una determinada tabla MySQL?

+0

En PHPMyAdmin puede ver el uso del espacio simplemente haciendo clic en ob la tabla. –

+0

Las respuestas a esta pregunta me ayudaron a obtener mi solución. Una búsqueda exhaustiva de una herramienta que podría ayudarme sin ejecutar la misma consulta cada vez para obtener los datos me hizo pasar por [MONyog] (https://www.webyog.com/product/monyog), [MySQL Enterprise Monitor] (http : //www.mysql.com/trials/), [Percona toolkit] (https://www.percona.com/software/mysql-tools/percona-toolkit). Todos ellos dan detalles sobre la información del disco, pero finalmente optaron por MONyog para obtener mejores gráficos gráficos y una fácil GUI. – Mathew

Respuesta

263

Para una carrera de mesa mydb.mytable esto para:

BYTES

SELECT (data_length+index_length) tablesize 
FROM information_schema.tables 
WHERE table_schema='mydb' and table_name='mytable'; 

KILOBYTES

SELECT (data_length+index_length)/power(1024,1) tablesize_kb 
FROM information_schema.tables 
WHERE table_schema='mydb' and table_name='mytable'; 

MEGABYTES

SELECT (data_length+index_length)/power(1024,2) tablesize_mb 
FROM information_schema.tables 
WHERE table_schema='mydb' and table_name='mytable'; 

GIGABYTES

SELECT (data_length+index_length)/power(1024,3) tablesize_gb 
FROM information_schema.tables 
WHERE table_schema='mydb' and table_name='mytable'; 

GENÉRICO

Aquí está una consulta genérica, donde la unidad de visualización máxima es TB (terabytes)

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE, 
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE, 
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE 
FROM 
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3 
    FROM 
    (
     SELECT data_length DAT,index_length NDX,data_length+index_length TBL, 
     FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px, 
     FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py, 
     FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz 
     FROM information_schema.tables 
     WHERE table_schema='mydb' 
     AND table_name='mytable' 
    ) AA 
) A,(SELECT 'B KBMBGBTB' units) B; 

darle una oportunidad !!!

+4

'SELECT (data_length + index_length)/power (1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema = 'mydb' ordena por tablesize_mb;' para obtener una lista de todas las tablas de 'mydb' con nombre y tamaño, ordenadas por tamaño. – guaka

+1

Agregue "DESC" a la cláusula ORDER BY para ver primero las tablas que consumen más espacio en disco. ;) – mvsagar

+0

Para ser precisos, es posible que desee llamar a las unidades ki ** bi ** bytes (KiB), me ** bi ** bytes (MiB) y gi ** bi ** bytes (GiB) cuando utilice prefijos binarios (multiplicación con el poder de 2). O bien, puede usar prefijos decimales (multiplicación con el poder de 1000) y luego llamar a las unidades ki ** lo ** bytes (KB), me ** ga ** bytes (MB) y gi ** ga ** bytes (GB). Ver más: https://en.wikipedia.org/wiki/prefix_binario –

0

Tomado de How do I check how much disk space my database is using?

Puede comprobar tamaño de la tabla de MySQL sea examinado phpMyAdmin en su panel de control haciendo clic en el nombre de la base de datos en el marco izquierdo y leyendo el tamaño de las mesas de allí en el marco correcto

La consulta siguiente será así ayudar a obtener la misma información en bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name'; 
+0

Esto supone que phpMyAdmin está instalado – thebigjc

0

Usted tal vez podría mirar el tamaño de los archivos ...

Cada tabla se almacena en una un par de archivos separados dentro de una carpeta que recibe el nombre de lo que usted llamó su base de datos. Estas carpetas se almacenan dentro del directorio de datos mysql.

Desde allí puede hacer un 'du -sh. *' Para obtener el tamaño de la tabla en el disco.

+0

Esto solo funciona para bases de datos MyISAM. El OP pidió una solución que también funciona con InnoDB. – Bgs

2

En Linux con MySQL instalados por defecto:

[[email protected]]$ ls -lha /var/lib/mysql/<databasename> 

basado en NIXCRAFT's mysql db location

+0

No funcionará si se usa innodb –

+0

La pregunta es cómo medir el espacio ocupado * por una mesa particular *. – Flimm

+0

@ShariqueAbdullah esto funcionará si está usando innodb_file_per_table, que no es el predeterminado, pero creo que es muy común y/o recomendado (alguien puede demostrarme que estoy equivocado en esto, solo mi impresión). – Seaux

1

Sobre la base de la respuesta de la RolandMySQLDBA Creo que podemos utilizar lo anterior para obtener el tamaño de cada esquema de una tabla:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema; 

gustó de verdad!

-1

me acaba de utilizar 'mysqldiskusage' herramienta como sigue

$ mysqldiskusage --server=user:[email protected] mydbname 
# Source on localhost: ... connected. 

# Database totals: 
+------------+----------------+ 
| db_name |   total | 
+------------+----------------+ 
| mydbaname | 5,403,033,600 | 
+------------+----------------+ 

Total database disk usage = 5,403,033,600 bytes or 5.03 GB 
+0

El OP pidió espacio en disco de una tabla MySQL particular, no toda la base de datos – machineaddict

8

poco rápido de SQL para obtener los mejores 20 grandes mesas en MB.

SELECT table_schema, table_name, 
    ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb 
FROM information_schema.tables 
ORDER BY tablesize_mb DESC LIMIT 20; 

Espero que sea útil para alguien!

+1

¡Muy útil! Gracias Ben! – aero

Cuestiones relacionadas