1. 程式人生 > >統計數據庫大小的方法

統計數據庫大小的方法

excel create 循環 spa data style not sda 使用

原文:統計數據庫大小的方法

一臺服務器上所有數據庫(也可能是部分數據庫)的大小是我們經常需要了解的,它不僅能讓我們知道目前數據庫使用磁盤的比例,

而且定期搜集這些信息,還能了解數據庫一段時間的數據增量,更為常用的是在做數據遷移和升級時,方便規劃新服務器磁盤容量。

這裏介紹三種統計數據庫大小的方法:

方法一:使用 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,比較方便。

此文就介紹這三種方法,如果大家有更好的方法,歡迎討論。



統計數據庫大小的方法