数据库的硬盘空间使用

SQL Server占用的存储空间,包含数据库file占用的存储空间,数据库对象占用的存储空间。

一,数据库file占用的存储空间

1,使用 sys.master_files 查看数据库中各个file占用的存储空间

select db.name as database_name,
    db.is_auto_shrink_on,
    db.recovery_model_desc,
    mf.file_id,
    mf.type_desc,
    mf.name as logic_file_name,
    mf.size*8/1024/1024 as size_gb,
    mf.physical_name,    --mf.max_size,    mf.growth,
    mf.is_percent_growth,
    mf.state_descfrom sys.databases db 
inner join sys.master_files mf 
    on db.database_id=mf.database_idwhere mf.size*8/1024/1024>1  -- GBorder by size_gb desc

2,使用sp_spaceused 查看当前DB的空间使用量

use DB_Studygoexec sys.sp_spaceused

database_size:database_size includes both data and log files.

数据文件的空间利用信息:

  • unallocated space :Space in the database that has not been reserved for database objects.
  • reserved:Total amount of space allocated by objects in the database.
  • data:Total amount of space used by data.
  • index_size:Total amount of space used by indexes.
  • unused :Total amount of space reserved for objects in the database, but not yet used.
  • database_size will always be larger than the sum of reserved + unallocated space because it includes the size of log files, but reserved and unallocated_space consider only data pages.

3, 按照extent统计data file的disk space usage

从系统page:GAM 和 SGAM 上读取Extent allocate 信息,计算data file有多少extent allocated 或 unallocated。

计算公式:1Extent=8Pages,1Page=8KB

dbcc showfilestats

4, 统计SQL Server 实例中所有数据库的日志文件的disk space usage

dbcc sqlperf(logspace) 返回的结果总是准确的,语句的执行不会对sql server增加负担

dbcc sqlperf(logspace)

二,查看数据库中,各个table 或index 所占用的disk space

1,查看数据库所有table 或index 所占用的disk space

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 as used_mb,    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 as data_used_mb,    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 as index_used_mbfrom sys.dm_db_partition_stats psinner join sys.tables t    on ps.object_id=t.object_idgroup by t.object_id, t.nameorder by reserved_gb desc

2,在当前DB中,查看某一个Table object 空间使用信息

exec sp_spaceused ‘dbo.dt_study‘

rows:Number of rows existing in the table.

reserved:Total amount of reserved space for objname.

data:Total amount of space used by data in objname.

index_size:Total amount of space used by indexes in objname.

unused:Total amount of space reserved for objname but not yet used.

三,使用Standard Reports 查看disk space usage

四,查看服务器各个逻辑盘符剩余的disk space

Exec master.sys.xp_fixeddrives

Appendix:

查看数据库中table,indexed等对象的disk空间使用量,但是返回的结果并不十分精确。

sp_spaceused Displays the number of rows, disk space reserved, and disk space used by a table, indexed view, or Service Broker queue in the current database, or displays the disk space reserved and used by the whole database.

Syntax

sp_spaceused [[ @objname = ] ‘objname‘ ] 
        [,[ @updateusage = ] ‘updateusage‘ ]

Arguments

  • @objname=objname
  • Is the qualified or nonqualified name of the table, indexed view, or queue for which space usage information is requested.Quotation marks are required only if a qualified object name is specified. If a fully qualified object name (including a database name) is provided, the database name must be the name of the current database.  If objname is not specified, results are returned for the whole database.  default objname is NULL.
  • @updateusage=updateusage
  • Indicates DBCC UPDATEUSAGE should be run to update space usage information. When objname is not specified, the statement is run on the whole database; otherwise, the statement is run on objname. Values can be true or false.updateusage is varchar(5), with a default of false.

Remarks

When updateusage is specified, the SQL Server Database Engine scans the data pages in the database and makes any required corrections to the sys.allocation_units and sys.partitions catalog views regarding the storage space used by each table. There are some situations, for example, after an index is dropped, when the space information for the table may not be current. updateusage can take some time to run on large tables or databases. Use updateusage only when you suspect incorrect values are being returned and when the process will not have an adverse effect on other users or processes in the database. If preferred, DBCC UPDATEUSAGE can be run separately.

Note:When you drop or rebuild large indexes, or drop or truncate large tables, the Database Engine defers the actual page deallocations, and their associated locks, until after the transaction commits. Deferred drop operations do not release allocated space immediately. Therefore, the values returned by sp_spaceused immediately after dropping or truncating a large object may not reflect the actual disk space available.

时间: 2024-10-12 12:00:10

数据库的硬盘空间使用的相关文章

ORACLE数据库占用大量硬盘空间常规解决方法

通常ORACLE数据库占用硬盘空间过大的原因有这么几个(以oracle 10.2.0版本为例): 1.oracle的安装目录...\oracle\product\10.2.0\admin\orcl\udump目录下,追踪日志文件占用大量硬盘空间: 2.oracle的安装目录...\oracle\product\10.2.0\oradata\orcl目录下,UNDO表空间文件占用大量硬盘空间. 针对以上两个问题,解决方法如下. 第一个问题解决方法: udump目录下面是oracle的追踪日志文件,

释放Linux系统预留的硬盘空间【转】

http://www.cnblogs.com/ggjucheng/archive/2012/10/07/2714294.html 前言 大多数文件系统都会保留一部分空间留作紧急情况时用(比如硬盘空间满了),这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash,给监控系统和管理员一点时间去察觉.不过有时候这部分预留的硬盘空间不用的话有点浪费.如何释放这部分系统预留的空间呢? 在 Linux ext2/ext3/ext4 文件系统上通常默认预留5%的硬盘空间,如果硬盘

通过命令行转移wsus补丁文件,解决硬盘空间不足

部署了WSUS服务器,使用正常,由于补丁下载的硬盘空间不够了,需要把补丁下载的路径改到一个比较大的硬盘上 由于磁盘空间不足,希望将下载的更新文件搬迁到一个新的分区. 可以使用WSUS中自带的wsusutil工具进行更新安装文件的搬迁操作.具体步骤如下: \1. 以本地管理员身份登录到WSUS服务器. \2. 在目标分区建立文件夹以存放更新文件如d:\wsus. \3. 打开一个CMD命令行窗口,然后进入以下路径: C:\program files\update services\tools \4

VMware虚拟机Ubuntu增加硬盘空间

Android4.1源码出来,没事也想下载下来看一下,结果悲剧的发现虚拟机上给Ubuntu分配的硬盘空间太小了,就剩下2.7G.而在官方文档中:The source download is approximately 6GB in size,说明源代码大小在6G左右,只好为Vmware虚拟机中的ubuntu再挂载一个20G的硬盘. (1)  增加虚拟机硬盘. 首先,打开Vmware里面VM里面的setting.如下图: 进入设置界面: 选择Hard Disk,点击下面Add: 点击next:选择

Oracle数据库创建表空间

--Oracle数据库创建表空间 create tablespace new_taspace --表空间名 DATAFILE 'D:\NEWTABLESPACE.DBF'   --表空间关联的数据文件和位置 size 200M --文件初始大小 autoextend on next 20MB MAXSIZE 400MB; --文件大小可自动扩展,每次扩展20MB,最大400MB --创建表空间 create tablespace new_taspace1 --表空间关联的数据文件和位置 DATA

VMware 下扩展linux硬盘空间

linux下扩展硬盘有很多种方式,在扩展之前,尽量看看自己的空间存在的有哪些盘,然后再进行扩展.如果是扩展的话,磁盘的符号和已经有的符号一样,比如都是sda的设备,知识分区不同,可能是sda3 sda4 如果是添加的话,相对于一个新的硬盘,可能是sdb  sdc 很多人在学习Nutch.Hadoop或者熟悉Linux操作系统时都会选择在VMWare上安装Linux虚拟机,而又往往不想分配给Linux虚拟机足够大的硬盘空间,这就容易导致使用Linux一段时间后,发现虚拟机上的硬盘空间不够了,此时怎

数据库创建表空间、临时表空、用户、授权

备注:oracle版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 说明:创建临时表空间注意关键字和创建表空间有所差别,语句类似 关于创建语句解说请查看:http://blog.chinaunix.net/uid-20802110-id-2105656.html 所列语句都是经过测试实战! 1.创建表数据空间 说明:该版本数据库创建表空间执行logging时报错,不执行logging,默认也是logging create ta

硬盘空间满导致mysql ibd文件被删后提示Tablespace is missing for table &#39;db_rsk/XXX&quot;

昨天一早,开发人员反馈说一个测试环境报Tablespace is missing for table 'db_rsk/XXX",周末刚升级过,特地让开发回去查了下,说脚本中肯定没有drop table的操作.datadir下检查了下,发现frm文件在的ibd文件没有了,bing了下,没发现类似异常.于是先回到mysql.err往回搜索,半天后发现上周五下午mysql出现了一次异常宕机,说是磁盘空间不足了,看日志该文件被损坏了,如下: 2016-11-12 11:31:00 28443 [ERRO

硬盘空间满,删除了大文件之后空间没有释放

1.硬盘空间满了 2.逐步查找大文件位置 du -sh /* 最后找到目标,并rm nohup.out删除该文件 3.再看空间并没有得到释放 4.原因是使用rm nohup.out,删除该文件,但该文件还被某个进程占用中,没有得到释放,我们可以使用 lsof | grep -i delete查看出删除的内容依然被进程占用,找到相应的进程kill掉即可完成释放. 来自为知笔记(Wiz)