设为首页 收藏本站
查看: 1232|回复: 0

[经验分享] SQL Server [表/索引]-- 查看数据库、表、索引的物理存储情况

[复制链接]

尚未签到

发表于 2018-10-21 08:01:45 | 显示全部楼层 |阅读模式
  From: http://www.cnblogs.com/kerrycode/archive/2010/09/13/1824481.html
  在管理、维护数据库时,经常需要查看数据库文件、日志文件所占用的磁盘空间,以及磁盘还剩下的磁盘空间,你可以通过下面几种方面
  查看数据库文件详细情况:
  1: 是通过远程连接(或***)连接到数据库服务器,直接去查看。
  2: 你连接到数据库后,可以通过mssms管理器,选择要查看的数据库,单击右键选择属性。然后选择文件选项,如下图所示。
DSC0000.gif

  3: 通过SQL命令、脚本查看。
  3.1: sys.database_files 视图中保存着数据库文件(数据文件、日志文件)等的详细信息
  SELECT * FROM sys.database_files
DSC0001.gif

  --通过下面命令,查看系统各磁盘可使用空间。
  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

  此列所属表的对象>  xtype
  tinyint
  sys.types 中的物理存储类型。
  typestat
  tinyint
  仅限内部使用。
  xusertype
  smallint

  扩展的用户定义数据类型的>  length
  smallint
  sys.types 中的最大物理存储长度。
  xprec
  tinyint
  仅限内部使用。
  xscale
  tinyint
  仅限内部使用。
  colid
  smallint

  列>  xoffset
  smallint
  仅限内部使用。
  bitpos
  tinyint
  仅限内部使用。
  reserved
  tinyint
  仅限内部使用。
  colstat
  smallint
  仅限内部使用。
  cdefault
  int

  此列的默认值的>  domain
  int

  此列的规则或 CHECK 约束的>  number
  smallint
  过程分组时的子过程号。
  0 = 非过程项
  colorder
  smallint
  仅限内部使用。
  autoval
  varbinary(8000)
  仅限内部使用。
  offset
  smallint
  此列所在行的偏移量。
  collationid
  int

  列的排序规则的>  status
  tinyint
  用于说明列或参数的属性的位图:
  0x08 = 列允许空值。
  0x10 = 添加 varchar 或 varbinary 列时,执行 ANSI 填充。保留 varchar 列的尾随空格以及 varbinary  列的尾随零。
  0x40 = 参数为 OUTPUT 参数。
  0x80 = 列为标识列。
  type
  tinyint
  sys.types 中的物理存储类型。
  usertype
  smallint

  sys.types 中的用户定义数据类型的>  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'
  对比看看两者下图的执行结果吧
DSC0002.gif



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624275-1-1.html 上篇帖子: BizTalk Server 如何发送 EDI 消息(4) 下篇帖子: SQL版的UML活动图——Merge1.0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表