統計數據庫大小的方法
阿新 • • 發佈:2018-01-26
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,比較方便。
此文就介紹這三種方法,如果大家有更好的方法,歡迎討論。
統計數據庫大小的方法