Cómo consultar el tamaño de las bases de datos y tablas
Hace unos meses me encontraba revisando los respaldos de mis sistemas cuando noté que el tamaño de las bases de datos en los servidores estaba creciendo demasiado rápido.
Para ello tenía programada una tarea de respaldo diaria y, de seguir así, el espacio de almacenamiento destinado para esta función se agotaría en pocas semanas.
Había programado las tareas de respaldo para que comprimiera los archivos antes de almacenarlos, por lo que la curiosidad me hizo querer saber qué capacidad real estaba ocupando esa base de datos y cuales tablas eran las responsables del crecimiento.
TE PUEDE INTERESAR: Cómo realizar el diseño de bases de datos relacionales
Luego de investigar en varias fuentes di con la solución a mi problema, y hoy se las quiero compartir por si están en una situación similar alguna vez.
Quiero destacar que existen algunas herramientas de gestión de bases de datos que pueden dar esta información, pero hoy les voy a mostrar la vía universal, tratándose por lo general de consultas SQL que serán funcionales en clientes desde consolas hasta los más avanzados del mercado.
Dicho esto, estaremos mostrando cómo consultar el tamaño de las bases de datos y tablas en varios sistemas gestores de bases de datos. Acompáñanos.
PostgreSQL
Comenzamos con PostgreSQL, mi gestor de bases de datos gratuito favorito. Si deseas consultar el tamaño de las bases de datos con este gestor debes utilizar la siguiente consulta:
SELECT pg_database.datname AS Nombre, pg_size_pretty(pg_database_size(pg_database.datname)) AS Tamaño
FROM pg_database;
El resultado será el nombre de cada una de las bases de datos con su respectivo espacio en disco expresado en kB, como se muestra en la siguiente imagen.
Si detectamos una tabla ocupando más espacio del previsto y queremos revisar a fondo, podemos utilizar la siguiente consulta:
SELECT schemaname AS table_schema,
relname AS table_name,
pg_size_pretty (pg_total_relation_size(relid)) AS total_size,
pg_size_pretty (pg_relation_size(relid)) AS data_size,
pg_size_pretty (pg_total_relation_size(relid) - pg_relation_size(relid))
AS external_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC,
pg_relation_size(relid) DESC
LIMIT 10;
Como resultado se mostrarán las tablas de la base de datos seleccionada con el espacio total que consumen, ordenadas descendientemente como se muestra en la siguiente imagen.
Ahorra en software
Únete al boletín premium semanal con los mejores lifetime deals y ofertas de software.
MySQL
En MySQL puedes consultar el tamaño de las bases de datos con el siguiente comando:
SELECT table_schema "DATABASE",
CONVERT(SUM(data_length + index_length)/1048576, DECIMAL(6,2)) "SIZE (MB)" FROM information_schema.tables WHERE table_schema != "information_schema" GROUP BY table_schema;
De este modo obtenemos un resultado similar a la alternativa que utilizamos en PostgreSQL, como podrás verificar en la siguiente imagen.
Y para ver cuánto consume cada tabla:
SELECT table_name Tabla,(data_length + index_length)/(1024 * 1024) Tamaño FROM information_schema.tables WHERE table_schema = 'midb';
Donde debes sustituir midb por la base de datos que deseas analizar. Debes obtener un resultado similar al que se muestra a continuación:
SQLServer
En el caso de SQLServer podemos utilizar la siguiente consulta para obtener el tamaño de las bases de datos:
SELECT sys.databases.name AS [Base de Datos],
CONVERT (VARCHAR, SUM(size) * 8/1024) +' MB' AS [Tamaño en disco]
FROM sys.databases JOIN sys.master_files
ON sys.databases.database_id = sys.master_files.database_id
GROUP BY sys.databases.name
ORDER BY sys.databases.name
Obteniendo como resultado una tabla similar a la que se muestra a continuación:
Y esta consulta para obtener el tamaño de cada tabla dentro de una base de datos.
SELECTt.NAME
ASTabla, s.Name
ASEsquema,
p.rows
ASNumeroDeFilas,
CAST(ROUND(((
SUM(a.total_pages)
*8
)
/1024.00
),
2)
ASNUMERIC
(
36,
2))
ASTotalEspacio_MB,
CAST(ROUND(((
SUM(a.used_pages)
*8
)
/1024.00
),
2)
ASNUMERIC
(
36,
2))
ASEspacioUtilizado_MB,
CAST(ROUND(((
SUM(a.total_pages)
-SUM
(a.used_pages))
*8
)
/1024.00
,
2)
ASNUMERIC
(
36,
2))
ASEspacioNoUtilizado_MB
FROM sys.tables t INNERJOIN
sys.indexes i
ONt.OBJECT_ID
=i.object_id
INNERJOIN
sys.partitions p
ONi.object_id
=p.OBJECT_ID
ANDi.index_id
=p.index_id
INNERJOIN
sys.allocation_units a
ONp.partition_id
=a.container_id
LEFTOUTER
JOIN
sys.schemas s
ONt.schema_id
=s.schema_id
GROUPBY
t.Name, s.Name, p.Rows
ORDERBYTotalEspacio_MB
desc
Como resultado:
Tamaño de las bases de datos usando Microsoft SQL Management Studio
Si utilizas Microsoft SQL Management Studio, la herramienta oficial para gestionar bases de datos de SQL Server, entonces el proceso puede ser más sencillo e ilustrativo. Solamente debes hacer clic derecho encima de la base de datos que deseas y seleccionar Reportes, para luego hacer clic en Reportes Estándar y Uso de Disco. El resultado muestra un reporte como este:
Para separar el tamaño por cada tabla, hacemos clic en Uso de Discos por Tablas, y tendremos como resultado una tabla con la cantidad de registros, espacio reservado, datos, índices y espacio sin usar. Puedes ver un ejemplo en la siguiente imagen.
Te recomiendo que revises la documentación oficial de esta herramienta si nunca la has usado antes, realmente ayuda bastante.
Tamaño de las bases de datos usando procedimiento almacenado
Otra posibilidad es utilizar el procedimiento almacenado sp_spaceused que proporciona SQL Server. Podemos ejecutarlo en una consulta en una base de datos o seguido por el nombre de una tabla y obtendremos como resultado algo similar a:
MongoDB
Por último, les muestro el proceso con mongoDB, retrasado hasta este momento a propósito, por la sencillez del procedimiento con este gestor utilizando sus comandos.
Para listar las bases de datos con su tamaño basta con invocar el comando:
show dbs
Para obtener un como resultado:
Si queremos conocer la información de una base de datos específica usamos el comando:
db.stats()
Obteniendo todos los parámetros de la base de datos a la que se hace referencia, incluyendo su tamaño, como se puede apreciar en la siguiente imagen.
Es todo lo que tenemos por hoy, intentamos cubrir este tema de la forma más completa posible con al menos una alternativa segura y funcional en cualquier contexto para cada caso, y otras que dependen de algún software específico.
Espero que este artículo te resulte de utilidad en el futuro. Por hoy me despido recomendándote nuestra selección de los mejores sistemas gestores de bases de datos relacionales y no-relacionales.
Solo agradecerte por el articulo
Saludos!
muchas gracias por el aporte !!!