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

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

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

时间: 2024-08-02 18:16:55

查询数据库,表和磁盘的使用情况的相关文章

MySQL数据库中查询数据库表、字段总数量,查询数据总量

最近要查询一些数据库的基本情况,由于以前用oracle数据库比较多,现在换了MySQL数据库,就整理了一部分语句记录下来. 1.查询数据库表数量 1 #查询MySQL服务中数据库表数据量 2 SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES GROUP BY table_schema; 3 #查询指定数据库表数量 4 SELECT COUNT(*) TABLES, table_schema FROM infor

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子 时间:2012-11-20 17:54:02 在JDBCPreparedStatement.executeQuery().getMetaData();后,我们可以通过ResultSetMetaData对象查询返回结果集的源数据信息,也就是表结构信息. 示例代码如下: package astar.sutil.db; import java.sql.Connection; import java.sql.Driv

(转)SQL server 2005查询数据库表的数量和表的数据量

本文转载自:http://hi.baidu.com/ajyajyajy/item/4e2a7f4dc83393d2c1a592c1 use DBNAMEgoselect * from sysobjects where xtype='U'; --这是查询所有表的信息select count(*) from sysobjects where xtype='U' --这是查询表的数量 ‍select a.name, b.rows from sysobjects a with(nolock) join

监控数据库表的磁盘使用情况

如何查看数据库数据量最大的表? 选择库--> 报表--> 标准报表-->按表的磁盘使用情况 原文地址:https://www.cnblogs.com/gered/p/8981730.html

sql查询 数据库 表 字段 等

1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FROM SysObjects Where XType='U' ORDER BY Name ==表中字段 1.方法一 SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='表名' 2.方法二 select a.name tablename,

数据库小记:根据指定名称查询数据库表名及根据指定名称查询数据库所有表中的字段名称(支持mysql/postgre)

意:本篇文章仅适用于mysql和postgre这两种数据库 1.查询数据库中所有表名及对应表的详细信息 select * from INFORMATION_SCHEMA.tables 2.根据指定名称查询表名(也可模糊查询,可查询表的详细信息) select *  from INFORMATION_SCHEMA.tables where table_name = 'eguid'; select * from INFORMATION_SCHEMA.tables where table_name l

mssqlserver 查询数据库表结构语句

查询指定表结构的表名.列名.类型.说明.字段长度 select o.name as tableName,c.name as columnName,t.name as columnType,p.value as columnDescription,c.prec from  sysobjects o left join syscolumns c  on o.id=c.idleft join sys.extended_properties p on p.major_id=c.id and p.mino

sql语句查询数据库表结构信息

开发中经常用到查询指定表及其字段的信息,以下是我整理的SQL语句查询方法,供自己平时使用也提供给大家参考! 1.适用MS SQL SERVER: 1 SELECT 2 表名 = case when a.colorder=1 then d.name else '' end, 3 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 4 字段序号 = a.colorder, 5 字段名 = a.name, 6 标识 = c

oracle 查询数据库表空间大小和剩余空间

dba_data_files:数据库数据文件信息表.可以统计表空间大小(总空间大小). dba_free_space:可以统计剩余表空间大小. 增加表空间即向表空间增加数据文件,表空间大小就是数据文件总大小. 检查Oracle各个表空间的增长情况(各表空间使用率) select A.tablespace_name,(1-(A.total)/B.total)*100 used_percent from (select tablespace_name,sum(bytes) total from db