查詢數據庫,表和磁盤的使用情況


總結下查詢數據庫,表和磁盤的使用情況。

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'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM