zoukankan      html  css  js  c++  java
  • 查询数据库,表和磁盘的使用情况

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

    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'

  • 相关阅读:
    docker介绍和简单使用
    docker 安装
    流畅的python python 序列
    mysql设计表结构数据类型的选择
    Mysql存储引擎的选择
    Linux python3安装/shell脚本/if/循环/函数
    LINUX 文件/组/帮助/权限/文件压缩/管道
    Linux介绍和基本命令
    如何安装secureCRT8.1破解
    centos7 终端修改字体大小
  • 原文地址:https://www.cnblogs.com/ziqiumeng/p/10967116.html
Copyright © 2011-2022 走看看