查询以计算数据库增长

cho*_*oy7 4 sql-server data-collection management-data-warehouse

我有以下查询从 MDW 数据收集器输出一些关于数据库空间使用情况的好信息。我想知道以下列(数据库大小、保留空间、未使用空间、未分配空间、收集日期)如何正确计算数据库增长趋势?我试图保留数据库是缩小还是增长考虑在内,所以我不能只采用“最大大小”并从中进行。这是到目前为止的完整查询...

DECLARE @ServerName VARCHAR(MAX);
DECLARE @SelectedDatabaseName VARCHAR(MAX);
DECLARE @snapshot_id INT;

SELECT TOP 1
        @snapshot_id = snapshot_id
FROM    ( SELECT DISTINCT TOP 100
                    d.snapshot_id
          FROM      snapshots.disk_usage d ,
                    core.snapshots ss
--WHERE ss.instance_name = @ServerName
--AND ss.snapshot_id = d.snapshot_id
ORDER BY            d.snapshot_id DESC
        ) AS q
ORDER BY snapshot_id ASC;

SELECT  database_name ,
        ss.instance_name ,
        CONVERT (DATETIME, SWITCHOFFSET(CAST (d.collection_time AS DATETIMEOFFSET),
                                        '+00:00')) AS collection_time ,
        d.snapshot_id ,
        ( ( CONVERT(DEC(15, 2), d.dbsize) + CONVERT(DEC(15, 2), d.logsize) )
          * 8192 / 1048576.0 ) AS 'database_size_mb' ,
        'reserved_mb' = ( d.reservedpages * 8192 / 1048576.0 ) ,
        'data_mb' = CONVERT(DEC(15, 2), d.pages) * 8192 / 1048576.0 ,
        'index_mb' = ( d.usedpages - d.pages ) * 8192 / 1048576.0 ,
        'unused_mb' = ( ( CONVERT(DEC(15, 2), d.reservedpages)
                          - CONVERT(DEC(15, 2), d.usedpages) ) * 8192
                        / 1048576.0 ) ,
        'unallocated_space_mb' = ( CASE WHEN d.dbsize >= d.reservedpages
                                        THEN ( CONVERT (DEC(15, 2), d.dbsize)
                                               - CONVERT (DEC(15, 2), d.reservedpages) )
                                             * 8192 / 1048576.0
                                        ELSE 0
                                   END )
FROM    snapshots.disk_usage d ,
        core.snapshots ss
WHERE   --database_name =@SelectedDatabaseName
/*AND*/ d.snapshot_id >= @snapshot_id
--AND ss.instance_name = @ServerName
        AND d.snapshot_id = ss.snapshot_id
ORDER BY d.database_name ASC ,
        collection_time;
Run Code Online (Sandbox Code Playgroud)

希望在它结束时,我将能够在一年后看到每个实例、数据库和服务器每年增长多少。

KAS*_*DBA 6

方法一:有成本

您可以使用第三方软件,该软件将在收集数据,并提出了数据库增长的报告方面为你做的一切,为解释时收集的数据预测同样取决于这里

方法 2:创建表,使用 SQL 代理作业运行存储的 proc 并相应地安排以收集创建的表中的数据,然后在一段时间内查询它以查看已收集的内容,并使用您手头的所有计算进行预测:

您可以按照此处的说明使用它

方法 3:在手动方面多一点但效果很好,正在使用默认跟踪。使用默认跟踪来捕获该数据库的数据和日志上的增长事件,具体取决于默认跟踪文件在那里停留的频率或时间长短:

方法 4我个人最喜欢和我一直在使用的方法:

这篇来自 Chad Miller数据库容量规划的优秀文章,它使用 T-SQL 和 Powershell 以及 SSRS 报告为您提供一段时间内所需的数据库增长。