SqlServer 之 查看表空间
一、用到系统视图 sys.sysindexes
该视图定义如下:
- CREATE VIEW sys.sysindexes AS
- SELECT id,
- status = convert(int,
- case indid when 1 then 16 else 0 end -- (is_clustered * 16)
- + (status & 8)/4 -- IS_IND_UNIQUE (is_unique * 2)
- + (status & 4)/4 -- IS_IND_DPKEYS (ignore_dup_key * 1)
- + (status & 32)*64 -- IS_IND_PRIMARY (is_primary_key * 2048)
- + (status & 64)*64 -- IS_IND_UNIQUE_CO (is_unique_constraint * 4096)
- + (status & 16)*16 -- IS_IND_PADINDEX (is_padded * 256)
- + (status & 256)/8 -- IS_IND_ITWINDEX (is_hypothetical * 32)
- + (1-(status & 1))*64 -- IS_INDEX
- + (status & 8192)*1024 -- IS_STATS_AUTO_CRT (auto_created * 0x800000)
- + (status & 16384)*1024), -- IS_STATS_NORECOMP (no_recompute * 0x1000000)
- first = case when i.rowset > 0 then p.first end,
- indid = convert(smallint, indid),
- root = case when i.rowset > 0 then p.root end,
- minlen = convert(smallint, case when status & 1 = 0 then 0 else indexproperty(id, name, 'minlen') end),
- keycnt = convert(smallint, indexproperty(id, name, 'keycnt80')),
- groupid = convert(smallint, case when dataspace < 32768 then dataspace end),
- dpages = convert(int, case when status & 1 = 0 then 0 else p.data_pages end),
- reserved = convert(int, case when status & 1 = 0 then 0 else p.total_pages end),
- used = convert(int, case when status & 1 = 0 then 0 else p.used_pages end),
- rowcnt = convert(bigint, case when status & 1 = 0 then 0 else p.rows end),
- rowmodctr = convert(int, indexproperty(id, name, 'rowmodcnt80')),
- reserved3 = convert(tinyint, 0),
- reserved4 = convert(tinyint, 0),
- xmaxlen = convert(smallint, case when status & 1 = 0 then 0 else indexproperty(id, name, 'maxlen') end),
- p.maxirow,
- OrigFillFactor = convert(tinyint, (status & 1)*fillfact), -- fill_factor
- StatVersion = convert(tinyint, 0),
- reserved2 = convert(int, 0),
- FirstIAM = case when i.rowset > 0 then p.FirstIAM end,
- impid = convert(smallint, 0),
- lockflags = convert(smallint, (status & 512)/512 + (status & 1024)/512), -- no_row_locks + no_page_locks*2
- pgmodctr = convert(int, 0),
- keys = convert(varbinary(1088), null),
- name = name,
- statblob = convert (image, null),
- maxlen = convert(int, 8000),
- rows = convert(int, case when status & 1 = 0 then 0 else 0x7FFFFFFF & p.rows end)
- FROM sys.sysidxstats i OUTER APPLY OpenRowset(TABLE INDEXPROP, id, indid, rowset) p
- WHERE indid < 256000
- AND has_access('CO', id) = 1
- GO
各列定义如下:
列名 | 数据类型 | 描述 |
---|---|---|
id | int | 表 ID(如果 indid= 0 或 255)。否则为索引所属表的 ID。 |
status | int | 内部系统状态信息。 |
first | binary(6) | 指向第一页或根页的指针。 |
indid | smallint | 索引 ID:
1 = 聚集索引 |
root | binary(6) | 如果 indid >= 1 和 < 255,root 是指向根页的指针。如果 indid = 0 或 indid = 255,root 是指向最后一页的指针。 |
minlen | smallint | 最小行大小。 |
keycnt | smallint | 键的数目。 |
groupid | smallint | 在其上创建对象的文件组 ID。 |
dpages | int | 如果 indid = 0 或 indid = 1,dpages 是已用数据页的计数。如果 indid = 255,其设置为 0。否则是已用索引页的计数。 |
reserved | int | 如果 indid = 0 或 indid = 1,reserved 是分配给所有索引和表数据的页计数。如果 indid = 255,reserved 是分配给 text 或 image 数据的页计数。否则是分配给索引的页计数。 |
used | int | 如果 indid = 0 或 indid = 1,used 是用于所有索引和表数据的总页数。如果 indid = 255,used 是用于 text 或 image 数据的页计数。否则是用于索引的页计数。 |
rowcnt | bigint | 基于 indid = 0 和 indid = 1 的数据级行计数。如果 indid = 255,rowcnt 设置为 0。 |
rowmodctr | int | 对自上次更新表的统计后插入、删除或更新行的总数进行计数。 |
xmaxlen | smallint | 最大行大小。 |
maxirow | smallint | 最大非叶索引行大小。 |
OrigFillFactor | tinyint | 创建索引时使用的起始填充因子值。不保留该值;然而,如果需要重新创建索引但记不住当初使用的填充因子,则该值可能很有帮助。 |
reserved1 | tinyint | 保留。 |
reserved2 | int | 保留。 |
FirstIAM | binary(6) | 保留。 |
impid | smallint | 保留。索引实现标志。 |
lockflags | smallint | 用于约束经过考虑的索引锁粒度。例如,对于本质上是只读的查找表,可以将其设置为仅进行表级锁定以使锁定成本减到最小。 |
pgmodctr | int | 保留。 |
keys | varbinary(816) | 组成索引键的列 ID 列表。 |
name | sysname | 表名(如果 indid= 0 或 255)。否则为索引的名称。 |
statblob | image | 统计 BLOB。 |
maxlen | int | 保留。 |
rows | int | 基于 indid = 0 和 indid = 1的数据级行数,该值对于 indid >1 重复。如果 indid = 255,rows 设置为 0。提供该列是为了向后兼容。 |
查看方式:
- SELECT OBJECT_NAME(id) tName,id,status,first,indid,root,minlen,keycnt,groupid,dpages,reserved,used,rowcnt,rowmodctr,
- reserved3,reserved4,xmaxlen,maxirow,OrigFillFactor,StatVersion,reserved2,FirstIAM,impid,lockflags,pgmodctr,keys,
- name,statblob,maxlen,rows
- FROM sysindexes
- WHERE indid=1
- ORDER BY reserved DESC
方法二、自定义方法
- IF NOT EXISTS (SELECT * FROM dbo.sysobjects
- WHERE id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
- CREATE TABLE tablespaceinfo --创建结果存储表
- (nameinfo varchar(50) ,
- rowsinfo int , reserved varchar(20) ,
- datainfo varchar(20) ,
- index_size varchar(20) ,
- unused varchar(20) )
- delete from tablespaceinfo --清空数据表
- declare @tablename varchar(255) --表名称
- declare @cmdsql varchar(500)
- DECLARE Info_cursor CURSOR FOR
- SELECT o.name
- FROM dbo.sysobjects o
- WHERE OBJECTPROPERTY(o.id, N'IsTable') = 1 AND o.name NOT LIKE N'#%%'
- ORDER BY o.name
- OPEN Info_cursor
- FETCH NEXT FROM Info_cursor
- INTO @tablename
- WHILE @@FETCH_STATUS = 0
- BEGIN
- if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
- execute sp_executesql
- N'insert into tablespaceinfo exec sp_spaceused @tbname',
- N'@tbname varchar(255)',
- @tbname = @tablename
- FETCH NEXT FROM Info_cursor
- INTO @tablename
- END
- CLOSE Info_cursor
- DEALLOCATE Info_cursor
- GO
- --itlearner注:显示数据库信息
- sp_spaceused @updateusage = 'TRUE'
- --itlearner注:显示表信息
- SELECT * FROM tablespaceinfo
- ORDER BY cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
SqlServer 之 查看表空间的更多相关文章
- Oracle以及SDE维护常用命令-查看表空间等
之前现场反馈一个数据更新的问题,查看感觉是因为表空间满了导致的(错误在之前的博客随笔中写过),因此远程对服务器进行查看.个人平常都是通过Oracle客户端的Entreprise Manager Con ...
- ORACLE查看表空间对象
ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME AS TABLESPACE_NAME ...
- Oracle 查看表空间的大小及使用情况sql语句
--1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...
- Oracle 查看表空间大小及其扩展
在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.系统中默认创建的几个表空间:S ...
- Oracle查看表空间及修改数据文件大小
Oracle查看表空间及修改数据文件大小 第一步:查看所有表空间及表空间大小: select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from ...
- [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE. Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.其实, ...
- Oracle查看表空间使用情况
查看表空间使用情况 select upper(f.tablespace_name) "表空间名", d.tot_grootte_mb "表空间大小(m ...
- Oracle dba_tablespace_usage_metrics 视图 查看表空间 说明
一.DBA_TABLESPACE_USAGE_METRICS 视图的理论说明 群里一朋友说使用dba_tablespace_usage_metrics 视图查看表空间的结果不正确,如下: ...
- Oracle查看表空间,创建表空间
查看表空间: SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM ...
随机推荐
- ArcGIS Desktop打开慢的解决办法
问题:ArcGIS Desktop打开巨慢,不管是ArcMap还是CataLog都是一样的,打开一次有时候需要10多分钟. 解决方法:C:\Users\[用户名]\AppData\Roaming\ES ...
- 使用sem_post信号量进行线程同步
写了一小段程序,测试一下线程同步的问题,如下: #include <stdio.h> #include <string.h> #include <semaphore.h& ...
- Labview二进制文件的操作
- js上三行下三行和添加多个附件
function addTr(num) { no ++; var obj = document.getElementById(tableID); var oneRow = obj.insertRow( ...
- iOS KVC/KVO/KVB
看了那么多博客.描述那么复杂,其实KVC很简单,没描述的那么复杂,所以写一篇简单的易于理解的博文,切入正文: 1.KVC底层是通过runtime对method和value操作 比如说如下的一行KVC ...
- ZOJ 3596Digit Number(BFS+DP)
一道比较不错的BFS+DP题目 题意很简单,就是问一个刚好包含m(m<=10)个不同数字的n的最小倍数. 很明显如果直接枚举每一位是什么这样的话显然复杂度是没有上限的,所以需要找到一个状态表示方 ...
- HDU3874Necklace(树状数组+离线操作)
此题的大意思说有一串珠子,每个珠子都有自己的欣赏值value,现在给你一串珠子每个的欣赏值,并给出一些询问,查询某个区间内部总欣赏值是多少,但是有一个约定就是如果这个区间内部有两个珠子的欣赏值是一样的 ...
- Redis本地环境搭建
Windows 下环境搭建 1. 设置hosts set duapphosts=127.0.0.1 sqld.duapp.com set redisduapphosts=127.0.0.1 redis ...
- java正则表达式语法详解及其使用代码实例
原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...
- 在类库中使用Session
昨天在做优化网站代码的时候,突发奇想想将页面的代码和业务逻辑代码分离开.就是页面下的.cs文件只用于收集前台上的数据而业务处理都放到一些类库中.可是问题来了,在类库中是无法直接使用Session.在网 ...