sql >> Base de Datos >  >> RDS >> Sqlserver

6 formas de verificar el tamaño de una base de datos en SQL Server usando T-SQL

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).