在管理、维护数据库时,经常需要查看数据库文件、日志文件所占用的磁盘空间,以及磁盘还剩下的磁盘空间,你可以通过下面几种方面
查看数据库文件详细情况:
1: 是通过远程连接(或×××)连接到数据库服务器,直接去查看。
2: 你连接到数据库后,可以通过mssms管理器,选择要查看的数据库,单击右键选择属性。然后选择文件选项,如下图所示。
3: 通过SQL命令、脚本查看。
3.1:
SELECT * FROM sys.database_files
--通过下面命令,查看系统各磁盘可使用空间。
EXEC master..xp_fixeddrives
当然你也可以用下面脚本只查看数据文件,日志文件大小。
SELECT SUM(SIZE) * 8.0 / 1024 AS [FileSize(MB)] ,
CASE type
WHEN 0 THEN 'DataBaseFileSize'
WHEN 1 THEN 'DataBaseLogSzie'
END AS Type
FROM sys.database_files
GROUP BY type
不过在删除或重新生成大型索引时,或者在删除或截断大型表时,数据引擎将延迟实际页释放以及关联锁,直至事物提交完毕为止。延迟的删除操作不会立即释放已分配的空间。因此,在删除或截断大型对象后,立即查询sys.database_files得到的数据可能没有反应实际可以用的磁盘空间。(具体可以看看MSDN)。
3.2 使用系统存储过程SP_HELPDB
EXEC SP_HELPDB 'MyAssistant'
3.3 系统存储过程SP_SPACEUSED:
SP_SPACEUSED它显示行数、保留的磁盘空间以及当前数据库中的表、索引视图或 SQL Server 2005 Service Broker队列所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间
EXEC SP_SPACEUSED
有时候你是不是想看看数据库里面的表、索引使用的磁盘空间情况,那么也有下面几种方法供你参考。
1:选择你要查看的表单击右键,选择属性,你就可以看到表、索引空间使用情况。
2:还是使用系统存储过程SP_SPACEUSED
EXEC SP_SPACEUSED 'bto_back_user'
3:通过系统视图sysindexes来计算表以及它的索引所占的磁盘空间等情况,下表是它包含的字段详细说明
列名 | 数据类型 | 说明 |
name | sysname | 列名或过程参数的名称。 |
id | int | 此列所属表的对象 ID,或者与此参数关联的存储过程的 ID。 |
xtype | tinyint | sys.types 中的物理存储类型。 |
typestat | tinyint | 仅限内部使用。 |
xusertype | smallint | 扩展的用户定义数据类型的 ID。如果数据类型数超过 32767,则会发生溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录。 |
length | smallint | sys.types 中的最大物理存储长度。 |
xprec | tinyint | 仅限内部使用。 |
xscale | tinyint | 仅限内部使用。 |
colid | smallint | 列 ID 或参数 ID。 |
xoffset | smallint | 仅限内部使用。 |
bitpos | tinyint | 仅限内部使用。 |
reserved | tinyint | 仅限内部使用。 |
colstat | smallint | 仅限内部使用。 |
cdefault | int | 此列的默认值的 ID。 |
domain | int | 此列的规则或 CHECK 约束的 ID。 |
number | smallint | 过程分组时的子过程号。 0 = 非过程项 |
colorder | smallint | 仅限内部使用。 |
autoval | varbinary(8000) | 仅限内部使用。 |
offset | smallint | 此列所在行的偏移量。 |
collationid | int | 列的排序规则的 ID。对于非字符列,此值为 NULL。 |
status | tinyint | 用于说明列或参数的属性的位图: 0x08 = 列允许空值。 0x10 = 添加 varchar 或 varbinary 列时,执行 ANSI 填充。保留 varchar 列的尾随空格以及 varbinary 列的尾随零。 0x40 = 参数为 OUTPUT 参数。 0x80 = 列为标识列。 |
type | tinyint | sys.types 中的物理存储类型。 |
usertype | smallint | sys.types 中的用户定义数据类型的 ID。如果数据类型数超过 32767,则会发生溢出或返回 NULL。有关详细信息,请参阅查询 SQL Server 系统目录。 |
printfmt | varchar(255) | 仅限内部使用。 |
prec | smallint | 此列的精度级别。 -1 = xml 或大值类型。 |
scale | int | 此列的小数位数。 NULL = 数据类型不是数值。 |
iscomputed | int | 指示列是否为计算列的标志: 0 = 非计算列。 1 = 计算列。 |
isoutparam | int | 指示过程参数是否为输出参数: 1 = True 0 = False |
isnullable | int | 指示列是否允许空值: 1 = True 0 = False |
collation | sysname | 列的排序规则的名称。如果不是基于字符的列,则为 NULL。 |
SELECT OBJECT_NAME(id) AS TableName ,
rowcnt AS ROWS,
reserved * 8.0 AS Reserved ,
dpages * 8.0 AS USED ,
(used - dpages)* 8.0 AS index_size,
( reserved - used ) * 8.0 AS Unused
FROM sysindexes
WHERE indid = 1
AND OBJECT_NAME(id) = 'users'
ORDER BY reserved DESCEXEC SP_SPACEUSED 'users'
对比看看两者下图的执行结果吧
转载于:https://blog.51cto.com/57388/1865092