Si está utilizando una herramienta GUI, como SSMS para administrar sus bases de datos, puede verificar fácilmente el tamaño de su base de datos haciendo clic en su camino a través de la GUI (haga clic con el botón derecho en la base de datos, seleccione Informes , luego Informes estándar y luego haz clic en Uso del disco ).
Sin embargo, si prefiere usar T-SQL para administrar sus bases de datos, deberá ejecutar una consulta que devuelva esta información.
Este artículo presenta seis formas de verificar el tamaño de una base de datos de SQL Server usando T-SQL.
El procedimiento almacenado sp_spaceused
Este es un procedimiento almacenado del sistema que muestra la cantidad de filas, el espacio en disco reservado y el espacio en disco utilizado por una tabla, vista indexada o cola de Service Broker en la base de datos actual, o muestra el espacio en disco reservado y utilizado por toda la base de datos.
Para usarlo, simplemente cambie a la base de datos correspondiente y ejecute el procedimiento. Así:
USE WideWorldImporters; EXEC sp_spaceused;
Resultado:
database_name database_size unallocated space ------------------ ------------- ----------------- WideWorldImporters 3172.00 MB 2511.76 MB 1 row(s) returned reserved data index_size unused --------- --------- ---------- ------- 573688 KB 461728 KB 104120 KB 7840 KB 1 row(s) returned
Esto devuelve dos conjuntos de resultados que proporcionan la información relevante.
También puede proporcionar un nombre de objeto para devolver datos sobre un objeto específico dentro de la base de datos. En este caso, solo se devolverá un conjunto de resultados.
Ejemplo:
USE WideWorldImporters; EXEC sp_spaceused N'Application.Cities';
Resultado:
name rows reserved data index_size unused ------ -------------------- -------- ------- ---------- ------ Cities 37940 4880 KB 3960 KB 896 KB 24 KB
En este ejemplo devolvemos información sobre las Cities
solo mesa.
El procedimiento almacenado sp_helpdb
Otro procedimiento almacenado del sistema es sp_helpdb
.
Aquí hay un ejemplo de llamar eso:
EXEC sp_helpdb N'WideWorldImporters';
Resultado:
name fileid filename filegroup size maxsize growth usage ------------ ------ ---------------- --------- ---------- ------------- -------- --------- WWI_Primary 1 /data/WWI.mdf PRIMARY 1048576 KB Unlimited 65536 KB data only WWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB log only WWI_UserData 3 /data/WWI_UD.ndf USERDATA 2097152 KB Unlimited 65536 KB data only
En este caso, pasamos el nombre de la base de datos como argumento. También podemos llamar a sp_helpdb
sin dar argumentos. Si hacemos esto, devolverá información sobre todas las bases de datos en sys.databases
vista de catálogo.
El procedimiento almacenado de sp_databases
Otra opción más es sp_databases
procedimiento almacenado del sistema. Este procedimiento almacenado enumera las bases de datos que residen en una instancia de SQL Server o son accesibles a través de una puerta de enlace de base de datos.
Así es como se ejecuta:
EXEC sp_databases;
Resultado:
DATABASE_NAME DATABASE_SIZE REMARKS ------------------ ------------- ------- master 6848 null model 16384 null msdb 15616 null Music 16384 null Nature 16384 null Solutions 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null world 16384 null WorldData 16384 null
La vista sys.master_files
El procedimiento almacenado anterior consulta el sys.master_files
vista. Entonces, una alternativa es ir directamente a la vista y seleccionar sus columnas:
SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.master_files WHERE DB_NAME(database_id) = 'WideWorldImporters';
Resultado:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
En este caso, podemos ver el tamaño de cada archivo de datos y archivo de registro, ya que se enumeran por separado. También notará que realizo un cálculo en el size
columna para convertir el valor en megabytes (MB).
La vista sys.database_files
También hay una vista del sistema llamada sys.database_files
. Podemos usar esta vista para devolver la misma información que el ejemplo anterior:
USE WideWorldImporters; SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.database_files;
Resultado:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
Usar una función de ventana
Un problema potencial con los dos ejemplos anteriores es que enumeran el tamaño de cada archivo por separado. Esto puede verse como algo positivo o negativo dependiendo de lo que quieras lograr.
También se podría argumentar que las primeras tres soluciones en esta página son problemáticas, porque solo brindan la suma total de todos los archivos; no enumeran cada archivo individual junto con su tamaño.
Entonces, ¿qué sucede si desea ver el tamaño de cada archivo individual, y el total de todos los archivos para cada base de datos?
Podrías usar OVER
cláusula para hacer exactamente eso.
He aquí un ejemplo:
SELECT d.name AS 'Database', m.name AS 'File', m.size, m.size * 8/1024 'Size (MB)', SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS 'Database Total', m.max_size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id = m.database_id;
Resultado:
Database File Size (MB) Database Total ------------------ --------------- --------- -------------- master master 4 6 master mastlog 2 6 model modeldev 8 16 model modellog 8 16 msdb MSDBData 14 14 msdb MSDBLog 0 14 Music Music 8 16 Music Music_log 8 16 Nature Nature 8 16 Nature Nature_log 8 16 Solutions Solutions 8 46 Solutions Solutions_log 8 46 Solutions Solutions_dat_2 10 46 Solutions Solutions_dat_3 10 46 Solutions Solutions_log_2 10 46 tempdb tempdev 8 16 tempdb templog 8 16 WideWorldImporters WWI_Primary 1024 3172 WideWorldImporters WWI_Log 100 3172 WideWorldImporters WWI_UserData 2048 3172 world world 8 16 world world_log 8 16
Esto enumera cada base de datos, los archivos para cada base de datos, el tamaño de archivo para cada archivo, así como el total de todos los archivos para cada base de datos. Esto requiere que cada base de datos (y su tamaño total) se enumere varias veces (una para cada archivo).