USP_DATABASEGROWTHMANAGEMENT_GETSUMMARY

Definition

Copy


CREATE procedure dbo.[USP_DATABASEGROWTHMANAGEMENT_GETSUMMARY]
as begin
  set nocount on;

  declare @DBDATAFILES bigint;
  declare @DBLOGFILES bigint;
  declare @RESERVEDPAGES bigint;
  declare @USEDPAGES bigint;
  declare @PAGES bigint;
  declare @DBSIZEKB bigint;
  declare @DBRESERVEDKB bigint;
  declare @DBUSEDKB bigint;
  declare @DBDATAKB bigint;
  declare @DBINDEXKB bigint;
  declare @DBUNUSEDKB bigint;
  declare @DBLOGKB bigint;
  declare @DBUNALLOCATEDKB bigint;
  declare @BUSINESSPROCESSPARAMETERSETID uniqueidentifier;
  declare @LASTRUN datetime;
  declare @STATUSCODE tinyint;
  declare @TABLESTOANALYZE integer;
  declare @TABLESANALYZED integer;

  -- this comes from sp_spaceused, modified slightly to use sys.database_files instead of the deprecated sysfiles...


  select @DBDATAFILES = sum(convert(bigint, case when type = 0 then size else 0 end)),
         @DBLOGFILES  = sum(convert(bigint, case when type = 1 then size else 0 end))
  from sys.database_files;

  -- this also comes from sp_spaceused, modified slightly for formatting...


  select
    @RESERVEDPAGES = sum(a.total_pages),
    @USEDPAGES = sum(a.used_pages),
    @PAGES = sum(case when it.internal_type in (202, 204, 207, 211, 212, 213, 214, 215, 216, 221, 222, 236) then 0
                      when a.type <> 1 and p.index_id < 2 then a.used_pages
                      when p.index_id < 2 then a.data_pages
                      else 0
                 end)
  from sys.partitions as p
  inner join sys.allocation_units as a on p.partition_id = a.container_id
  left outer join sys.internal_tables it on p.object_id = it.object_id;

  -- this also comes from sp_spaceused, modified slightly to return values in KB, rather than formatting them as decimal MB...


  select
    @DBDATAKB = @PAGES * (8192 / 1024),
    @DBINDEXKB = (@USEDPAGES - @PAGES) * (8192 / 1024),
    @DBUNUSEDKB = (@RESERVEDPAGES - @USEDPAGES) * (8192 / 1024),
    @DBUNALLOCATEDKB = case when @DBDATAFILES >= @RESERVEDPAGES then (@DBDATAFILES - @RESERVEDPAGES) * (8192 / 1024) else 0 end,
    @DBLOGKB = @DBLOGFILES * (8192 / 1024);

  -- according to http://sqlserverzest.com/2013/06/28/sql-server-understanding-sp_spaceused-results-for-database-size-information/


  set @DBUSEDKB = @DBDATAKB + @DBINDEXKB;
  set @DBRESERVEDKB = @DBUSEDKB + @DBUNUSEDKB;
  set @DBSIZEKB = @DBRESERVEDKB + @DBUNALLOCATEDKB + @DBLOGKB;

  select top 1
    @BUSINESSPROCESSPARAMETERSETID = [ID],
    @TABLESANALYZED = [TABLESANALYZED],
    @TABLESTOANALYZE = [TABLESTOANALYZE]
  from dbo.[DATABASEGROWTHANALYSISPROCESS];

  set @STATUSCODE = 3; -- undefined


  if exists (select top 1 1 from dbo.[BUSINESSPROCESSSTATUS] where [BUSINESSPROCESSCATALOGID] = '23C3CAE9-FEC7-4EAB-BA79-E50C997A5BBF')
    select top 1
      @STATUSCODE = [STATUSCODE],
      @LASTRUN = [STARTEDON]
    from dbo.[BUSINESSPROCESSSTATUS]
    where [BUSINESSPROCESSCATALOGID] = '23C3CAE9-FEC7-4EAB-BA79-E50C997A5BBF'
    order by [STARTEDON] desc;

  select
    db_id() as [DBID],
    db_name() as [DBNAME],
    @DBSIZEKB as [DBSIZEKB],
    @DBRESERVEDKB as [DBRESERVEDKB],
    @DBUSEDKB as [DBUSEDKB],
    @DBDATAKB as [DBDATAKB],
    @DBINDEXKB as [DBINDEXKB],
    @DBUNUSEDKB as [DBUNUSEDKB],
    @DBLOGKB as [DBLOGKB],
    @DBUNALLOCATEDKB as [DBUNALLOCATEDKB],
    count(*) as [BBTABLES],
    sum(cast([DATAKB] as bigint) + cast([INDEXKB] as bigint)) as [BBUSEDKB],
    sum(cast([RESERVEDKB] as bigint)) as [BBRESERVEDKB],
    sum(cast([DATAKB] as bigint)) as [BBDATAKB],
    sum(cast([INDEXKB] as bigint)) as [BBINDEXKB],
    sum(cast([UNUSEDKB] as bigint)) as [BBUNUSEDKB],
    @BUSINESSPROCESSPARAMETERSETID as [BUSINESSPROCESSPARAMETERSETID],
    @LASTRUN as [LASTRUN],
    @STATUSCODE as [STATUSCODE],
    @TABLESTOANALYZE as [TABLESTOANALYZE],
    @TABLESANALYZED as [TABLESANALYZED]
  from dbo.[DATABASESPACEUSED];

  return 0;
end