如何监控 SQL Server 使用 TSQL 和 Excel 的数据库增长

立即分享:

监视数据库增长是规划服务器资源的关键因素。 使用此脚本并创建易于理解的数据库增长报告

为什么需要监控数据库增长

如果您是 SQL 数据库管理员并且没有“SQL Server 数据库容量规划”在您的关键任务列表中,那么您可以确定服务器上的数据库将很快填满您的磁盘空间。 跟踪 SQL 数据库的大小和增长是容量规划的主要任务之一。 这也确保磁盘上有足够的空间供您的数据库增长。

通过 SQL 脚本和 Excel 进行 DIY

在本文中,我们将使用 SQL 和 Excel 来捕获 SQL 数据库的大小以及模式。 这将使我们能够规划迫在眉睫的空间需求,并帮助我们了解出现大容量的时间表。

此过程分为四个不同的步骤,因此您可以毫无困难地进行操作。

第 1 步:在新的查询窗口中执行此脚本。

输出将数据库名称作为行标题,月份作为列标题。 输出中显示的值是以 GB 为单位的数据库大小。

declare @v_count as integer, @do_count as integer, @v_month as varchar(20),@sql as varchar(5000)

create table [t_databases]
(
Database_Name varchar(200),
January       float(3),
February      float(3),
March  float(3),
April  float(3),
May    float(3),
June   float(3),
July   float(3),
August float(3),
September     float(3),
October       float(3),
November      float(3),
December      float(3),
)
create table t_databases_gateway
(
Database_Name varchar(200),
Database_Size float(3)
)
set @v_count = (select COUNT(*) from t_databases ) 
if @v_count = 0 
begin
insert into t_databases(Database_Name)
select name from sysdatabases 
 end
if @v_count <> 0 
 begin 
--this script captures the size of all databases. You can add a where clause to capture the size of specific database name 
 INSERT t_databases (Database_Name) 
 SELECT DISTINCT Name FROM sysdatabases cr LEFT JOIN t_databases c ON cr.Name = c.Database_Name WHERE c.Database_Name IS NULL 
 end 
 --select * from master.dbo.t_databases 
 --drop table t_databases 
 set @do_count = 1 
 while (@do_count <=12) 
 begin 
 set @v_month = DATENAME(m, str(@do_count) + '/1/2016') –change the year to 2017 or other year as per your requirement 
 truncate table master.dbo.t_databases_gateway 
 insert into master.dbo.t_databases_gateway select distinct
(msdb.dbo.backupset.[database_name]),max(msdb.dbo.backupset.[Backup_Size]/1073741824)
from msdb.dbo.backupset inner join master.dbo.t_databases on msdb.dbo.backupset.[database_name] = master.dbo.t_databases.[Database_Name] where
datepart(m,msdb.dbo.backupset.[backup_finish_date]) =  @do_count and datepart(yyyy,msdb.dbo.backupset.[backup_finish_date] ) = 2015 group by msdb.dbo.backupset.[database_name]
set @sql = 'update master.dbo.t_databases set ' + @v_month + ' = (select Database_Size from master.dbo.t_databases_gateway where master.dbo.t_databases.Database_Name = master.dbo.t_databases_gateway.Database_Name)'
exec (@sql)
set @do_count = @do_count + 1
end
select * from t_databases
drop table t_databases_gateway
drop table t_databases

输出:输出数据库大小

第 2 步:创建一个新的 Excel 实例,并将上一步的输出复制到新的 Excel 工作表中。

将输出复制到 Excel 工作表

第 3 步:现在选择工作表上的前两行并插入二维折线图。

这将为所选数据库创建趋势图。 在图表中,X 轴表示月份,Y 轴表示以 GB 为单位的数据库大小。选择工作表上的前两行并插入二维折线图

第 4 步:通过拖动“加号”符号将其包围来选择整个数据。

这将在图表上显示所有数据库的趋势。选择整个数据

在图表上显示所有数据库的趋势

如果您跳过第 3 步并通过选择整个表格来插入二维折线图,您仍然会得到一个图表,但 X 轴将表示数据库名称而不是月份,这不是所需的输出。跳过第 3 步并通过选择整个表格来插入二维折线图

输出表可能有一些 NULL 值。 发生这种情况是因为数据库备份历史可能没有该特定月份的任何数据库记录。 这也意味着脚本会参考备份历史表中的备份大小来跟踪增长趋势。 如果您的任何数据库未包含在备份计划中,输出表仍将包含数据库名称,但所有月份的值都将为 NULL

修复超大数据库

如果你以前没有遵循上面的策略,你的数据库过大,那么可能会导致各种问题。 在这种情况下,你最好找一个 SQL Server 文件恢复工具 有效和高效地解决问题。

作者简介:

Neil Varley 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 Outlook 问题 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。