MS SQL,数据库增长时众多表中谁是你关注的目标

数据库就像是个小孩子,不知不觉的,可能就有了不能承受的压力。刚开始时,那快乐的时光如同刚入学时,只有快乐。但是,慢慢的、慢慢的,作业多了,关系复杂了。。。。。

系统上线三个月后,数据库的大小情况从一开始只是10M,现在已224G了,我觉得有必要写点什么。

 

我们有一个数据库,主要是用于MES的数据收集,也就是从自动化设备上收集数据。具体的逻辑我就不多说,回到正题,你建立了应用,就算你不是DBA,你也应该关心一下你用的数据库情况,一开始你系统上线时,可能你的数据库只是一张白纸,可能只有几个M的大小,你可以用sp_spaceused看看,系统也很顺,但是,看一下以下我用这个SP的结果:

image

以上是系统上线三个月后,数据库的大小情况,一开始只是10M,现在已224G了。

 

服务器的空间也是有限的,也是会有可能用完的,对于没有控制的使用要特别小心。当系统上线后,最需要关注的就是数据库了。你要知道数据的增长情况,可以使用的空间情况!什么时候需要增加索引以使系统运行更快,什么时候你应该对数据进行归档等等。

我们再说回sp_spaceused这个SP,我除了用它看数据库的数据情况外,还用它来看整个库的所有表各有多少记录、点用多大的数据空间、索引点用空间等。以下的T-SQL就可以实现看一个库所有表的记录情况!

    declare @tablename varchar(250);
    declare @tempTable table (nameinfo varchar(250)
            ,rowsinfo int
            ,reserved varchar(50)
            ,datainfo varchar(50)
            ,index_size varchar(50)
            ,unused varchar(50)
        );
    declare info_cursor cursor for 
    select [name] as Table_Name  
    from sys.objects where type='U' order by [name] 
    open info_cursor
    fetch next from info_cursor 
    into @tablename
    while @@fetch_status = 0
      begin
         insert into @tempTable(nameinfo,rowsinfo,reserved,datainfo,index_size,unused)
         exec sp_spaceused @tablename
         fetch next from info_cursor 
         into @tablename 
      end
   close info_cursor
   deallocate info_cursor   
   select * from @tempTable order by rowsinfo desc
   go

 

执行代码,发现我的122个数据表,1千万以上记录的已有7个,最大的已有1亿六千万记录:

image

 

实际上,这个还应该建立一个JOB来定时执行,保存下结果用于分析。接下来要做什么还是要做什么,目的是不要等数据库罢工!

posted @ 2012-09-11 15:02  谢堂文(Darren Xie)  阅读(250)  评论(0编辑  收藏  举报