查询数据库,表和磁盘的使用情况

本文详细介绍了SQL Server数据库的磁盘空间监控与管理方法,包括查询数据库、表及磁盘使用情况的T-SQL命令,如何通过压缩存储减少空间占用,以及事务日志文件的管理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结下查询数据库,表和磁盘的使用情况。

1、如下,可以看到第一列是磁盘名称,第二列是该磁盘剩余的空间,单位是 M

exec sys.xp_fixeddrives

2、使用系统SP:exec sys.sp_spaceused

如果后面不接任何对象,则返回整个数据库的情况

exec sys.sp_spaceused

 

注:database_size是所有数据库文件大小+日志文件的大小,unallocated space指的是数据库还未使用的空间,如果这部分空间很大,可以考虑压缩数据库,当然,database_size-unallocated space=已经使用的空间

 

后面接表

exec sys.sp_spaceused Table_2

reserved=data+index_size+unused,如果unused空间很大,则有可能是这个表很多的数据被迁移走了,空间没有释放,如果你的磁盘在乎这部分空间的话,你可以考虑压缩这个表

 3、对于查询DB信息,你还可以使用:

EXEC SP_HELPDB 'Test' 

拓展:

1、收缩(shrink)数据库文件

use target_database_name
go

select file_id,
    type,
    type_desc,
    data_space_id,
    name,
    size*8/1024/1024 as size_gb,
    growth,
    is_percent_growth,
    physical_name,
    max_size
from sys.database_files

dbcc shrinkfile('file logcial name',0,notruncate)
dbcc shrinkfile('file logcial name',target_size_mb,truncateonly)

 

2,对数据库中的 table 和 index 压缩存储
2.1, 查看数据库中,占用存储空间非常大的table;

use target_database_name
go

select 
    t.name,
    sum(case when ps.index_id<2 then ps.row_count else 0 end) as row_count,
    sum(ps.reserved_page_count)*8/1024/1024 as reserved_gb,
    sum(ps.used_page_count)*8/1024/1024 as used_gb,
    sum( case when ps.index_id<2
                    then ps.in_row_data_page_count+ps.lob_used_page_count+ps.row_overflow_used_page_count
              else 0 end
        )*8/1024/1024 as data_used_gb,
    sum(case when ps.index_id>=2 
                then ps.in_row_data_page_count+ps.lob_used_page_count+ps.row_overflow_used_page_count
             else 0 end
        )*8/1024/1024 as index_used_gb
from sys.dm_db_partition_stats ps
inner join sys.tables t
    on ps.object_id=t.object_id
group by t.object_id, t.name
order by used_gb desc

 

2.2, 查看table及其Index是否被压缩过

select p.partition_id,object_name(p.object_id) as ObjectName,
    p.index_id,
    p.rows,
    p.data_compression,
    p.data_compression_desc,
    au.Type,
    au.Type_desc,
    au.total_pages,
    au.used_pages,
    au.data_pages
from sys.partitions p
inner join sys.allocation_units au
    on p.partition_id=au.container_id 
where p.object_id=object_id('[dbo].[table_name]',N'U')

2.3,估计压缩能够节省的存储空间

exec sys.sp_estimate_data_compression_savings 
                @schema_name='dbo',
                @object_name='table_name',
                @index_id=1,
                @partition_number=null,
                @data_compression ='page'

 

 2.4, 对table及其index进行数据压缩
对table 及其index 进行 rebuild,SQL Server将重新分配存储空间,慎重:rebuild 反而会增加数据库占用的存储空间。在数据压缩存储之后,必须shrink 数据库文件,才能释放数据库所占用的存储空间,增加Disk的Free Space。

alter table [dbo].table_name
rebuild with(data_compression=page)

alter index index_name
on [dbo].table_name
rebuild with(data_compression=page)

 

 3,增加事务日志文件

 参考:《The transaction log for database 'tempdb' is full due to 'ACTIVE_TRANSACTION'

转载于:https://www.cnblogs.com/ziqiumeng/p/10967116.html

为了有效监控管理磁盘空间,以及确保Oracle数据库的平稳运行,推荐查阅《T100运维手册:磁盘空间管理与数据库监控指南》。这份手册详细介绍了如何使用df-h命令检查特定目录的磁盘使用情况,以及如何利用Oracle数据库工具查看空间的使用状态。 参考资源链接:[T100运维手册:磁盘空间管理与数据库监控指南](https://wenku.youkuaiyun.com/doc/70paoc69tx) 首先,使用df-h命令查看/u1/u2/u3/u5/ut等目录的磁盘使用情况。例如,你可以执行以下命令来获取这些目录的空间使用信息: ```bash df -h /u1 /u2 /u3 /u5 /ut ``` 这条命令将会列出每个指定目录的总空间、已使用空间、可用空间使用率。 接下来,为了监控Oracle数据库中的空间使用情况,可以通过SQL*Plus工具访问数据库。首先切换至Oracle用户权限,然后使用sqlplus登录,并切换至DBA权限: ```bash su - oracle sqlplus / as sysdba ``` 执行以下SQL查询来查看空间的磁盘使用情况: ```sql SELECT t.tablespace_name, SUM(df.bytes)/(1024*1024) AS total_space_MB, SUM(fs.bytes)/(1024*1024) AS free_space_MB, (SUM(fs.bytes)/(SUM(df.bytes))*100) AS free_percentage FROM dba_data_files df, dba_free_space fs, dba_tablespaces t WHERE df.file_id = fs.file_id AND t.tablespace_name = df.tablespace_name(+) GROUP BY t.tablespace_name; ``` 此查询从DBA_DATA_FILESDBA_FREE_SPACE视图获取数据,并计算每个空间的总空间、已用空间可用空间以及使用率。 此外,如果你需要特别关注包含临时文件的空间,可以查询DBA_TEMP_FILES视图来获取临时文件的空间使用详情。 通过这两部分的操作,你可以全面地掌握系统磁盘空间数据库空间的使用情况。如果你希望获得更深入的理解更全面的管理技巧,建议继续参考《T100运维手册:磁盘空间管理与数据库监控指南》中的相关章节,以便在实际工作中更加有效地执行磁盘空间管理数据库监控。 参考资源链接:[T100运维手册:磁盘空间管理与数据库监控指南](https://wenku.youkuaiyun.com/doc/70paoc69tx)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值