A continuación veremos una serie de consultas útiles, sobre la base de datos information-schema de MySQL para visualizar:

  • Cantidad de tablas, filas, tamaño de archivos de datos e índices y relación de tamaño indice/datos
  • Listado de las tablas más grandes
  • Distribución de datos por motor de almacenamiento

Cantidad de tablas, filas, tamaño de archivos de datos e índices y relación de tamaño indice/datos

SELECT
  count(*) TABLES
  ,concat(round(sum(table_rows)/1000000,2),'K') rows
  ,concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA
  ,concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx
  ,concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size
  ,round(sum(index_length)/sum(data_length),2) idxfrac
FROM
  information_schema.TABLES;
-- Si deseamos filtrar por tabla aplicamos una condición
-- WHERE
--   WHERE table_name LIKE "%tabla_buscada%";

Listado de las tablas más grandes

SELECT
  count(*) TABLES
  ,table_schema,concat(round(sum(table_rows)/1000000,2),'M') rows
  ,concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA
  ,concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx
  ,concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size
  ,round(sum(index_length)/sum(data_length),2) idxfrac
FROM
  information_schema.TABLES
GROUP BY
  table_schema
ORDER BY
  sum(data_length+index_length) DESC LIMIT 10;

Distribución de datos por motor de almacenamiento

SELECT
  engine
  ,count(*) TABLES
  ,concat(round(sum(table_rows)/1000000,2),'M') rows
  ,concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA
  ,concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx
  ,concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size
  ,round(sum(index_length)/sum(data_length),2) idxfrac
FROM
  information_schema.TABLES
GROUP BY
  engine
ORDER BY
  sum(data_length+index_length) DESC LIMIT 10;

Vía: MySQL Performance Blog