zoukankan      html  css  js  c++  java
  • 统计数据库大小的方法(转载)

    一台服务器上所有数据库(也可能是部分数据库)的大小是我们经常需要了解的,它不仅能让我们知道目前数据库使用磁盘的比例,

    而且定期搜集这些信息,还能了解数据库一段时间的数据增量,更为常用的是在做数据迁移和升级时,方便规划新服务器磁盘容量。

     这里介绍三种统计数据库大小的方法:

     方法一:使用 sp_spaceused

    复制代码
    declare @dbname varchar(100) 
    declare db_cur cursor for
    select name from sys.sysdatabases where dbid>4 and name<>'distribution'
    open db_cur
    fetch next from db_cur into @dbname
    while @@FETCH_STATUS=0
    begin
    print('use '+QUOTENAME(@dbname))
    Print('go')
    Print('sp_spaceused')
    fetch next from db_cur into @dbname
    end
    close db_cur
    deallocate db_cur
    复制代码

      说明:我们做了初步的数据筛选,去掉了系统数据库和分发数据库,此方法会生成以下脚本

    复制代码
    use [ReportServer]
    go
    sp_spaceused
    use [ReportServerTempDB]
    go
    sp_spaceused
    use [DataCache]
    go
    sp_spaceused
    use [MessageCenter]
    go
    sp_spaceused
    use [ABS]
    go
    sp_spaceused
    use [dbcenter]
    go
    sp_spaceused
    use [MDW]
    go
    sp_spaceused
    复制代码

    我们直接运行,会得到相关数据库大小的统计信息:

    我们需要的数据是打钩的信息(带database_name),将这些数据拷贝出来,放到Excel中就能很方便的做统计了

    从图中可以看到,数据库大小为:363MB;此方法比较麻烦,不过对2000和2000以下版本的数据库是比较好的方法(没有DMV);

    方法二:sys.database_files 和sp_MSforeachdb相结合

    复制代码
    --统计某个实例中部分数据库大小:
    use master
    go
    create table dbsize (dbname varchar(100),size int)

    --将数据库名和大小插入数据库表中
    exec sp_MSforeachdb "insert into master.dbo.dbsize
    select '?' as dbname,sum(size) as size from ?.sys.database_files"
    复制代码

    说明:我们利用sp_MSforeachdb循环数据库,再在每个数据库中查询sys.database_files 视图来统计数据文件的大小,得到的结果放入到一个表中,

    然后再使用这个表来做统计;

    select * from master.dbo.dbsize

    --计算筛选数据库总大小
    select SUM(size)*8/1024 as dbsize from dbsize where dbname not in
    ('master','tempdb','model','msdb','distribution')

    如上图所示,统计出来的数据库大小也是:363MB。

    方法三:sys.sysaltfiles与sys.databases结合统计

    复制代码
    --db file size
    select db.name,sf.name,sf.filename,sf.size from sys.sysaltfiles sf inner join sys.databases db
    on sf.dbid=db.database_id
    where db.database_id>4 and db.name <>'distribution'

    --dbsize
    select SUM(size)*8/1024 from sys.sysaltfiles sf inner join sys.databases db
    on sf.dbid=db.database_id
    where db.database_id>4 and db.name <>'distribution'
    复制代码

    这种方法一次性搞定,统计出的数据库大小也是:363MB,比较方便。

        此文就介绍这三种方法,如果大家有更好的方法,欢迎讨论。

  • 相关阅读:
    【hihocoder 1477】闰秒
    【codeforces 768F】Barrels and boxes
    【codeforces 767E】Change-free
    【codeforces 810A】Straight «A»
    【codeforces 810B】Summer sell-off
    【codeforces 810C】Do you want a date?
    【codeforces 757E】Bash Plays with Functions
    【codeforces 749D】Leaving Auction
    Java数据结构与算法(5)
    使用Xshell远程连接管理Linux实践
  • 原文地址:https://www.cnblogs.com/qiulang/p/3435922.html
Copyright © 2011-2022 走看看