代码改变世界

查看数据库、表、索引的物理存储情况

2010-09-13 08:18  潇湘隐者  阅读(2445)  评论(2编辑  收藏  举报
在管理、维护数据库时,经常需要查看数据库文件、日志文件所占用的磁盘空间,以及磁盘还剩下的磁盘空间,你可以通过下面几种方面
查看数据库文件详细情况:
 
1: 是通过远程连接(或VPN)连接到数据库服务器,直接去查看。
 
2: 你连接到数据库后,可以通过mssms管理器,选择要查看的数据库,单击右键选择属性。然后选择文件选项,如下图所示。

 

3: 通过SQL命令、脚本查看。

 

  3.1: sys.database_files 视图中保存着数据库文件(数据文件、日志文件)等的详细信息 

 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 DESC

EXEC SP_SPACEUSED 'users'

 

 

对比看看两者下图的执行结果吧