首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

如何查看各表占用的包括 lob 的实际空间,有没有这样的sql语句

2012-08-31 
怎么查看各表占用的包括 lob 的实际空间,有没有这样的sql语句select OBJECT_NAME(ID),SIZE sum(reserved

怎么查看各表占用的包括 lob 的实际空间,有没有这样的sql语句
select OBJECT_NAME(ID)
  ,SIZE = sum(reserved) * CONVERT(FLOAT, (SELECT LOW FROM MASTER.DBO.SPT_VALUES WHERE NUMBER = 1 AND TYPE = 'E')) /1024.00/1024.00
  --表大小(字节)= 8192 x Num_Pages (M)
  from sysindexes
  where indid in (0,1,255)
  GROUP BY ID
  ORDER BY SIZE DESC


各个表都占用的空间不大,但是整个数据库有4g之大,我想知道怎么查询出实际占用的空间,有没有办法。


百分百结贴



[解决办法]
sp_spaceused 表名
[解决办法]
sp_spaceused 
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。 

示例 
A. 有关表的空间信息 
下例报告为 titles 表分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。 

USE pubs 
EXEC sp_spaceused 'titles ' 

B. 有关整个数据库的已更新空间信息 
下例概括当前数据库使用的空间并使用可选参数 @updateusage。

USE pubs 
sp_spaceused @updateusage = 'TRUE '
[解决办法]
sp_spaceuser 表名
[解决办法]

SQL code
declare @a varchar(100)declare csr_tbname cursor for select [name] from sys.objects where type='U'open csr_tbname fetch next from csr_tbname into @a;while @@FETCH_STATUS=0begin    exec sp_spaceused @a;    fetch next from csr_tbname into @a;endclose csr_tbname;deallocate csr_tbname;-- 这样查出来的总和也不会等于数据库的大小,我试过,并且差距很大。-- sp_helpdb
[解决办法]
2005后,用这个存储过程看看。
SQL code
USE MASTER GO IF OBJECT_ID('sp_tableinfo') IS NOT NULL DROP PROC sp_tableinfo GO CREATE PROCEDURE sp_tableinfo @tblPat SYSNAME = '%' ,@sort CHAR(1) = 'm' AS --Written by Tibor Karaszi 2010-09-30--Modified 2010-10-10, fixed rowcount multiplied by number of indexes.--Modified 2010-10-11, fixed rowcount incorrect with BLOB and row overflow data.WITH t AS(SELECT SCHEMA_NAME(t.schema_id) AS schema_name,t.name AS table_name,SUM(CASE WHEN p.index_id IN(0,1) AND a.type_desc = 'IN_ROW_DATA' THEN p.rows ELSE 0 END) AS rows,SUM(CAST((a.total_pages * 8.00) / 1024 AS DECIMAL(9,2))) AS MB ,SUM(a.total_pages) AS pages ,ds.name AS locationFROM sys.tables AS tINNER JOIN sys.partitions AS p ON t.OBJECT_ID = p.OBJECT_IDINNER JOIN sys.allocation_units AS a ON p.hobt_id = a.container_id INNER JOIN sys.data_spaces AS ds ON a.data_space_id = ds.data_space_idWHERE t.name LIKE @tblPat GROUP BY SCHEMA_NAME(t.schema_id), t.name, ds.name )SELECT schema_name, table_name, rows, MB, pages, locationFROM tORDER BYCASE WHEN @sort = 'n' THEN table_name END,CASE WHEN @sort = 'r' THEN rows END DESC,CASE WHEN @sort = 'm' THEN MB END DESC,CASE WHEN @sort = 's' THEN schema_name ENDGO 

热点排行