手机版

关于查看MSSQL数据库用户每个表占用的空间大小

时间:2021-11-18 来源:互联网 编辑:宝哥软件园 浏览:

最近做项目需要查看数据用户表的大小,包括记录条数和占用的磁盘空间数目。在网上找了很久其中查看MSSQL数据库每个表占用的空间大小相对还可以。不过它的2、3中方法返回的数据比较多,有些是我们不关心的数据,我在冒险家2012数据上做的测试。其中第二种方法代码如下:复制代码代码如下:如果不存在,查看代码(从dbo.sysobjects中选择*其中id=object_id(N'[dbo]).[tablespaceinfo]')和OBJECTPROPERTY(id,N'IsUserTable')=1)创建表表空间信息-创建结果存储表(nameinfo varchar(50)、rowsinfo int、保留的varchar(20)、datainfo varchar(20)、index_size varchar(20)、未使用的varchar(20))从表空间信息中删除-清空数据表声明@tablename varchar(255) -表名称DECLARE @ cmdsql varchar(500)DECLARE Info _ CURSOR FOR select o . name FROM dbo。sysobjects o其中OBJECTPROPERTY(o.id,N'IsTable')=1,o . name不像N ' # % '按o . name排序打开Info _ CURSOR从Info _ CURSOR获取NEXT进入@ table name WHILE @ FETCH _ STATUS=0 beginif存在(从dbo.sysobjects中选择*其中id=object_id(@tablename)和OBJECTPROPERTY(id,N'IsUserTable')=1)执行sp _ executesql N ' insert in tablespaceinfo exec sp _ space used @ tbname ',N'@tbname varchar(255)',@ tbname=@ tablename fetch NEXT FROM Info _ cursor INTO @ tablename ENDCLOSE Info _ cursor estimation locate Info _ cursorGO-it carrier注:显示数据库信息使用的sp _ space @ updateusage=' TRUE '-it字母注:显示表信息从按投排序的表空间信息中选择*(左(ltrim(rtrim(保留))、透镜(ltrim)(rtrim(保留)))-2)作为国际)desc运行效果如图

很显然这个返回结果是错误的。但是它提供了一种思路,修改后的结构化查询语言语句如下:复制代码代码如下:如果不存在,查看代码(从系统表中选择*其中名称='表空间信息)开始创建表表空间信息-创建结果存储表(表名VARCHAR(50),行数INT,保留的INT,datainfo INT,index_size INT,未使用的INT)END DELETE FROM tablespaceinfo-清空数据表创建表#临时-创建结果存储表(nameinfo VARCHAR(50),rowsinfo INT,reserved VARCHAR(20),datainfo VARCHAR(20),index_size VARCHAR(20),未使用的VARCHAR(20))DECLARE @ tablename VARCHAR(255)-表名称DECLARE @ cmdsql NVARCHAR(500)DECLARE Info _ cursor or SELECT '[' TABLE _ SCHEMA '].['表名']'作为[信息模式]的表名其中,表类型='基本表'和TABLE _ NAME ' TABLE space Info '打开Info _ cursor FETCH NEXT FROM Info _ cursor to @ tablename,同时@ FETCH _ STATUS=0 BEGIN SET @ cmdsql=' insert in # temp exec sp _ space已使用' ' @ TABLE NAME ' ' ' ' EXECUTE sp _ EXECUTE SQL @ cmdsql FETCH NEXT FROM Info _ cursor to @ TABLE NAME ENDCLOSE Info _ cursor deal定位Info _ cursorGO-it carrier注:显示数据库信息-sp _ space used @ updateusage=' TRUE '-it字母注:显示表信息UPDATE # tempSET reserved=REPLACE(reserved,' KB ',''),datainfo=REPLACE(datainfo,' KB ',''),index_size=REPLACE(index_size,' KB ',''),unused=REPLACE(unused,' KB ',' ')INSERT INTO dbo。 表空间信息选择名称信息,CAST(rowsinfo AS INT)、CAST(保留为AS INT)、CAST(datainfo AS INT)、CAST(index_size AS INT)、CAST(未使用的从#临时删除表#临时选择表名、行数、保留时大小写1024然后转换(保留/1024 AS VARCHAR(10))“Mb”ELSE CAST(保留为VARCHAR(10))“KB”END AS Data _ And _ Index _ Reserved、CASE WHEN Data info 1024 THEN CAST(Data info/1024 AS VARCHAR(10))CASE WHEN Index _ size 1024 THEN CAST(Index _ size/1024 AS VARCHAR(10))“Mb”ELSE CAST(Index _ size AS VARCHAR(10))“KB”END AS Index _ size,CASE WHEN未使用1024 THEN CAST(未使用/1024 AS VARCHAR(10))“Mb”ELSE CAST(未使用预订desc的餐桌信息订单运行结果如图

同时他的第三种方法返回的数据太多,很多是我们不怎么关心的,原结构化查询语言语句如下:复制代码代码如下:查看代码选择对象名表名,*保留/1024保留,RTRIM(8 * dpages/1024)“Mb”已使用,*(保留-dpage)/1024未使用,* dpage/1024-row/1024 * min len/1024空闲,行来自sysindexesWHERE其中indid=1ORDER BY保留DESC运行结果如图

这里面包含一些索引信息,其实我们只关心表占用磁盘信息,修改后的结构化查询语言语句如下:复制代码代码如下:查看代码选择对象名表名CASE WHEN reserved * 8 1024 THEN RTRIM(8 * reserved/1024)“MB”ELSE RTRIM(保留* 8)“KB”END数据保留,CASE WHEN dpages * 8 1024 THEN RTRIM(8 * dpages/1024)“MB”ELSE RTRIM(dpages * 8)“KB”END Used,CASE WHEN 8 *(保留-dpage)1024然后RTRIM(8 *(保留-dpages)/1024 " MB " ELSE RTRIM(8 *(保留-(页))“千字节”结束未使用,CASE WHEN(8 * dpages/1024-row/1024 * min len/1024)1024 THEN RTRIM((8 * dpages/1024-row/1024 * min len/1024)/1024)“MB”ELSE RTRIM((8 * dpages/1024-row/1024 * min len/1024))“KB”END FREE,row AS Rows _ count from sys indexeswhere。其中indid=1和状态=2066运行结果如下

有不对的地方欢迎大家拍砖!

版权声明:关于查看MSSQL数据库用户每个表占用的空间大小是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。