Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

6 maneiras de verificar o tamanho de um banco de dados no SQL Server usando T-SQL


Se você estiver usando uma ferramenta GUI, como o SSMS, para gerenciar seus bancos de dados, poderá verificar facilmente o tamanho do banco de dados clicando na GUI (clique com o botão direito do mouse no banco de dados, aponte para Relatórios , em seguida, Relatórios padrão e clique em Uso do disco ).

No entanto, se você preferir usar o T-SQL para gerenciar seus bancos de dados, precisará executar uma consulta que retorne essas informações.

Este artigo apresenta seis maneiras de verificar o tamanho de um banco de dados SQL Server usando T-SQL.


O procedimento armazenado sp_spaceused


Este é um procedimento armazenado do sistema que exibe o número de linhas, espaço em disco reservado e espaço em disco usado por uma tabela, exibição indexada ou fila do Service Broker no banco de dados atual ou exibe o espaço em disco reservado e usado por todo o banco de dados.

Para usá-lo, basta alternar para o banco de dados relevante e executar o procedimento. Assim:
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

Isso retorna dois conjuntos de resultados que fornecem as informações relevantes.

Você também pode fornecer um nome de objeto para retornar dados em um objeto específico no banco de dados. Nesse caso, apenas um conjunto de resultados será retornado.

Exemplo:
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

Neste exemplo, retornamos informações sobre as Cities mesa apenas.

O procedimento armazenado sp_helpdb


Outro procedimento armazenado do sistema é sp_helpdb .

Aqui está um exemplo de como chamar isso:
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

Neste caso, passamos o nome do banco de dados como argumento. Também podemos chamar sp_helpdb sem apresentar argumentos. Se fizermos isso, ele retornará informações sobre todos os bancos de dados no sys.databases visualização do catálogo.

O procedimento armazenado sp_databases


Outra opção é o sp_databases procedimento armazenado do sistema. Esse procedimento armazenado lista os bancos de dados que residem em uma instância do SQL Server ou são acessíveis por meio de um gateway de banco de dados.

Veja como executá-lo:
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

A visualização sys.master_files


O procedimento armazenado acima consulta os sys.master_files visualizar. Portanto, uma alternativa é ir direto para a visualização e escolher suas colunas:
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       

Nesse caso, podemos ver o tamanho de cada arquivo de dados e arquivo de log, pois estão listados separadamente. Você também notará que eu executo um cálculo no size coluna para converter o valor em megabytes (MB).

A visualização sys.database_files


Há também uma visualização do sistema chamada sys.database_files . Podemos usar essa visualização para retornar as mesmas informações do exemplo 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 uma função de janela


Um problema potencial com os dois exemplos anteriores é que eles listam o tamanho de cada arquivo separadamente. Isso pode ser visto como positivo ou negativo, dependendo do que você deseja alcançar.

Também pode-se argumentar que as três primeiras soluções nesta página são problemáticas, porque fornecem apenas a soma total de todos os arquivos – elas não listam cada arquivo individual junto com seu tamanho.

E se você quiser ver o tamanho de cada arquivo individual, e o total de todos os arquivos para cada banco de dados?

Você pode usar o OVER cláusula para fazer exatamente isso.

Aqui está um exemplo:
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       

Isso lista cada banco de dados, os arquivos para cada banco de dados, o tamanho do arquivo para cada arquivo, bem como o total de todos os arquivos para cada banco de dados. Isso requer que cada banco de dados (e seu tamanho total) seja listado várias vezes (uma vez para cada arquivo).