欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

SQL Server 查询数据库及数据文件大小的方法

2025年08月16日 MsSqlserver
1. 直接使用sql1.1 查询当前数据库大小exec sp_spaceused;说明:该命令会返回当前数据库的总大小、未使用空间等信息。前提是你已经 use 到目标数据库中。1.2 查询所有数据库的

1. 直接使用sql

1.1 查询当前数据库大小

exec sp_spaceused;

说明:
该命令会返回当前数据库的总大小、未使用空间等信息。
前提是你已经 use 到目标数据库中。

1.2 查询所有数据库的大小

select
    db_name(database_id) as databasename,
    cast(sum(size) * 8 / 1024.0 as decimal(18,2)) as sizemb
from
    sys.master_files
group by
    database_id
order by
    sizemb desc;

说明:
包括数据文件(.mdf)和日志文件(.ldf)的大小。
size 单位是 8kb,所以需要乘 8 后再除以 1024 转换为 mb。

如果需要输出 gb 大小,可使用如下sql:

select
    db_name(database_id) as databasename,
    cast(sum(size) * 8 / 1024.0 as decimal(18,2)) as totalsizemb,
    cast(sum(size) * 8 / 1024.0 / 1024.0 as decimal(18,2)) as totalsizegb
from
    sys.master_files
group by
    database_id
order by
    totalsizemb desc;

1.3 查询每个数据库的详细文件大小

select
    db_name(mf.database_id) as databasename,
    mf.name as logicalname,
    mf.type_desc as filetype,
    mf.physical_name as filepath,
    cast(mf.size * 8 / 1024.0 as decimal(18,2)) as sizemb
from
    sys.master_files mf
order by
    databasename, filetype;

说明:
可以看到每个文件的逻辑名称、文件类型(数据或日志)、路径及大小。

如果你需要指定某个数据库名查询,也可以加上条件,例如:

where db_name(mf.database_id) = 'yourdatabasename'

2.调用存储过程

如果不想每次写sql查询,建议写成可重复使用的存储过程,之后调用存储过程即可。

2.1 查询所有数据库的大小(数据和日志文件分开显示)

如下存储过程可列出所有数据库的大小(数据和日志文件分开显示),单位为 mb:

--创建存储过程
use master;
go
create procedure dbo.getalldatabasesizes
as
begin
    set nocount on;
    select
        db_name(mf.database_id) as databasename,
        mf.type_desc as filetype,           -- rows = 数据文件,log = 日志文件
        cast(sum(mf.size) * 8 / 1024.0 as decimal(18,2)) as sizemb
    from
        sys.master_files mf
    group by
        mf.database_id,
        mf.type_desc
    order by
        databasename, filetype;
end;
go

调用方式如下:

exec dbo.getalldatabasesizes;

2.2 查询所有数据库的大小(数据 + 日志)合并显示

create procedure dbo.getdatabasetotalsizes
as
begin
    set nocount on;
    select
        db_name(database_id) as databasename,
        cast(sum(size) * 8 / 1024.0 as decimal(18,2)) as totalsizemb
    from
        sys.master_files
    group by
        database_id
    order by
        totalsizemb desc;
end;
go

调用方式如下:

exec dbo.getdatabasetotalsizes;

2.3 查询所有数据库的大小(输出 gb、加上磁盘路径等信息)

use master;
go
create procedure dbo.getdatabasefiledetails
as
begin
    set nocount on;
    select
        db_name(mf.database_id) as databasename,
        mf.type_desc as filetype,                            -- rows 或 log
        mf.physical_name as filepath,                        -- 文件完整路径
        cast(mf.size * 8 / 1024.0 as decimal(18,2)) as sizemb,
        cast(mf.size * 8 / 1024.0 / 1024.0 as decimal(18,2)) as sizegb
    from
        sys.master_files mf
    order by
        db_name(mf.database_id), mf.type_desc;
end;
go

调用方式如下:

exec dbo.getdatabasefiledetails;

到此这篇关于sql server 查询数据库及数据文件大小的文章就介绍到这了,更多相关sql server 查看数据库大小内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!