数据增长 心里有数

 在it运维过程中,决策层经常会找我们要一些数据,用于制定一些预算,或者他们就是想知道。如果他们问你数据每月增长量是多少?未来一年我们要买多大容量的存储才可以?你能回答出来吗。这个要求有三个办法可以满足,笨办法、花钱的办法、不花钱的办法。

笨办法:每月或者每天打开数据库属性,看数据库容量,然后记录在excel或者本上上;

花钱的办法:通过scom监控,参见:http://yejunjian.blog.51cto.com/

下面说的是不花钱的办法,思路是每天自动记录每个数据库的数据容量和日志容量,写入一张表;然后将当日的事务日志容量和数据容量之和分别写入另外两张表。有了这些数据,无论是拿到EXCEL中折腾还是到bi里面折腾都可以。

首先用下面的代码建立三个表,我放在了master库中,无论你放在那里,请写入相应的文档,以免遗忘或者你离职之后为难后面的人。

 

  
  
  
  
  1. CREATE TABLE [dbo].[CountSize] 
  2.     ( 
  3.       [name] [sysname] NOT NULL , 
  4.       [SIZE] [intNULL , 
  5.       [type] [tinyint] NOT NULL , 
  6.       [type_desc] [nvarchar](60) NULL , 
  7.       [physical_name] [nvarchar](260) NOT NULL , 
  8.       [nowtime] [datetime] NOT NULL 
  9.                             
  10.     ) 
  11. ON  [PRIMARY
  12. --建表,合计log容量 
  13. CREATE TABLE TotalLogSize 
  14.     ( 
  15.       TotalLogSize INT , 
  16.       CountDate DATETIME UNIQUE 
  17.     ) ;     
  18.  go 
  19.  --建表,合计数据容量 
  20. CREATE TABLE TotaldataSize 
  21.     ( 
  22.       TotaldataSize INT , 
  23.       CountDate DATETIME UNIQUE 
  24.     ) ;  
  25.   go  

第一个表用于存放每天数据库日志、数据的容量。第二个和第三个数据库用于存放当日的数据库容量之和、日志容量之和。加上UNIQUE 是为了防止重复,也可以不加。

建表完成之后将下面的脚本加入到job里面,每天执行一次:

 

  
  
  
  
  1. USE master 
  2. DECLARE @sql VARCHAR(1000) 
  3. SELECT  @sql = 'use [?]; INSERT INTO master.dbo.countsize SELECT name,size*8/1024 AS SIZE,type,type_desc,physical_name,CONVERT(DATETIME, CONVERT(VARCHAR(11), GETDATE(), 112)) as nowtime FROM sys.database_files ;' 
  4. EXEC sp_msforeachdb @sql 
  5. --插入当前合计 
  6. INSERT  INTO TotaldataSize 
  7.         ( TotaldataSize , 
  8.           CountDate 
  9.         ) 
  10.         SELECT  SUM(sizeAS TotaldataSize , 
  11.                 CONVERT(DATETIME, CONVERT(VARCHAR(11), GETDATE(), 112)) AS CountDate 
  12.         FROM    dbo.countsize 
  13.         WHERE   type_desc = 'rows' 
  14.                 AND nowtime = CONVERT(DATETIME, CONVERT(VARCHAR(11), GETDATE(), 112)) 
  15. go 
  16. INSERT  INTO TotalLogSize 
  17.         ( TotalLogSize , 
  18.           CountDate 
  19.         ) 
  20.         SELECT  SUM(sizeAS TotalLogSize , 
  21.                 CONVERT(DATETIME, CONVERT(VARCHAR(11), GETDATE(), 112)) AS CountDate 
  22.         FROM    dbo.countsize 
  23.         WHERE   type_desc = 'log' 
  24.                 AND nowtime = CONVERT(DATETIME, CONVERT(VARCHAR(11), GETDATE(), 112)) 
  25. go 

以后查询只用访问全面建立的三个表的内容即可。

你可能感兴趣的:(sql,职场,休闲,SERVE监控)