首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server 2008:如何查询所有数据库大小?

SQL Server 2008:如何查询所有数据库大小?
EN

Stack Overflow用户
提问于 2011-05-10 13:00:25
回答 15查看 349.1K关注 0票数 128

我有MSSQL2008 R2,500个数据库。查询所有数据库大小的最有效、最简单和最“现代”的方法是什么?

输出应包含列:

  • DatabaseName
  • DataFilesSize
  • LogFilesSize
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-05-10 14:37:06

代码语言:javascript
复制
with fs
as
(
    select database_id, type, size * 8.0 / 1024 size
    from sys.master_files
)
select 
    name,
    (select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeMB,
    (select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeMB
from sys.databases db
票数 233
EN

Stack Overflow用户

发布于 2011-05-10 14:06:46

我不知道你所说的效率是什么意思,但这很简单,它对我很有效:

代码语言:javascript
复制
SELECT
    DB_NAME(db.database_id) DatabaseName,
    (CAST(mfrows.RowSize AS FLOAT)*8)/1024 RowSizeMB,
    (CAST(mflog.LogSize AS FLOAT)*8)/1024 LogSizeMB,
    (CAST(mfstream.StreamSize AS FLOAT)*8)/1024 StreamSizeMB,
    (CAST(mftext.TextIndexSize AS FLOAT)*8)/1024 TextIndexSizeMB
FROM sys.databases db
    LEFT JOIN (SELECT database_id, SUM(size) RowSize FROM sys.master_files WHERE type = 0 GROUP BY database_id, type) mfrows ON mfrows.database_id = db.database_id
    LEFT JOIN (SELECT database_id, SUM(size) LogSize FROM sys.master_files WHERE type = 1 GROUP BY database_id, type) mflog ON mflog.database_id = db.database_id
    LEFT JOIN (SELECT database_id, SUM(size) StreamSize FROM sys.master_files WHERE type = 2 GROUP BY database_id, type) mfstream ON mfstream.database_id = db.database_id
    LEFT JOIN (SELECT database_id, SUM(size) TextIndexSize FROM sys.master_files WHERE type = 4 GROUP BY database_id, type) mftext ON mftext.database_id = db.database_id

结果如下:

代码语言:javascript
复制
DatabaseName  RowSizeMB LogSizeMB StreamSizeMB TextIndexSizeMB
------------- --------- --------- ------------ ---------------
master        4         1.25      NULL         NULL
model         2.25      0.75      NULL         NULL
msdb          14.75     8.1875    NULL         NULL
tempdb        8         0.5       NULL         NULL

注:灵感来自this article

票数 42
EN

Stack Overflow用户

发布于 2014-12-10 08:49:38

这是一个简单、快速和可靠的查询,它将在一个漂亮、易于阅读的输出中给出所有数据库和日志文件的名称、大小以及数据库状态(例如在线):

代码语言:javascript
复制
SELECT
    D.name,
    F.Name AS FileType,
    F.physical_name AS PhysicalFile,
    F.state_desc AS OnlineStatus,
    CAST(F.size AS bigint) * 8*1024 AS SizeInBytes,
    CAST((F.size*8.0)/1024/1024 AS decimal(18,3)) AS SizeInGB
FROM 
    sys.master_files F
    INNER JOIN sys.databases D ON D.database_id = F.database_id
ORDER BY SizeInBytes desc
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5945360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档