Recuperando o tamanho dos dados e log de todos os bancos
Publicado; 03/12/2011 Arquivado em: SQL Space Used Deixe um comentárioA sp abaixo recupera o tamanho dos dados e log de todos os bancos da instância. A sp inclui colunas informando a percentagem livre, MB utilizados, etc. Vale conferir (gastei uns 30 minutos para elaborá-la). Bom proveito.
CREATE PROCEDURE dbo.uspDatabaseSize
AS
declare
@tbl table (Database_Id int, DataUsedMB Float)
insert into @tbl
exec sp_MSforeachdb
‘select db_id(”?”) , (SUM(ps.reserved_page_count)*8)/1024 from ?.sys.dm_db_partition_stats ps’;
WITH DataSize
AS
(
select
DB_ID(d.instance_name) Database_Id
, d.instance_name Database_Name
, d.cntr_value/1024 DataSizeMB
from sys.dm_os_performance_counters d
where d.object_name like ‘%databases%’
and d.counter_name like ‘%Data File(s) Size (KB)%’
),
LogSize AS
(
select
DB_ID(p.instance_name) Database_Id
, p.instance_name Database_Name
, p.cntr_value/1024 LogSizeMB
from sys.dm_os_performance_counters p
where p.object_name like ‘%databases%’
and p.counter_name like ‘Log File(s) Size (KB)%’
),
LogUsedSize AS
(
select
DB_ID(p.instance_name) Database_Id
, p.instance_name Database_Name
, p.cntr_value/1024 LogUsedSizeMB
from sys.dm_os_performance_counters p
where p.object_name like ‘%databases%’
and p.counter_name like ‘Log File(s) Used Size (KB)%’
),
LogPercentUsed AS
(
select
DB_ID(p.instance_name) Database_Id
, p.instance_name Database_Name
, p.cntr_value LogUsedPercent
, 100 – p.cntr_value LogFreePercent
from sys.dm_os_performance_counters p
where p.object_name like ‘%databases%’
and p.counter_name like ‘Percent Log Used%’
)
select
ROW_NUMBER() over(order by DataSize.Database_Name) Seq
, DataSize.Database_Id
, DataSize.Database_Name
, DataSize.DataSizeMB
, t.DataUsedMB
, (DataSize.DataSizeMB – t.DataUsedMB) DataFreeSizeMB
, ROUND(((DataSize.DataSizeMB – t.DataUsedMB) / DataSize.DataSizeMB)*100, 2) DataFreePercent
, LogSize.LogSizeMB
, LogUsedSize.LogUsedSizeMB
, (LogSize.LogSizeMB – LogUsedSize.LogUsedSizeMB) LogFreeSizeMB
, LogPercentUsed.LogUsedPercent
, LogPercentUsed.LogFreePercent
from DataSize
join LogSize on DataSize.Database_Id = LogSize.Database_Id
join LogUsedSize on LogSize.Database_Id = LogUsedSize.Database_Id
join LogPercentUsed on LogSize.Database_Id = LogPercentUsed.Database_Id
join @tbl t on DataSize.Database_Id = t.Database_Id
go
Veja uma amostra do resultado da SP: