当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL Server 查询数据库及数据文件大小的方法

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 查看数据库大小内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com