计算sql server数据库的大小
我需要找到sql server 2008数据库的大小。我使用了以下存储过程 EXEC sp_空间使用 如果返回以下数据,数据库名称、数据库大小、未分配空间、保留、数据、索引大小、未使用 是否有任何方法可以获得数据库的大小(不包括某些表) 我可以使用此查询获得每个数据库表的保留大小计算sql server数据库的大小,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要找到sql server 2008数据库的大小。我使用了以下存储过程 EXEC sp_空间使用 如果返回以下数据,数据库名称、数据库大小、未分配空间、保留、数据、索引大小、未使用 是否有任何方法可以获得数据库的大小(不包括某些表) 我可以使用此查询获得每个数据库表的保留大小 DECLARE @LOW int SELECT @LOW = LOW FROM [master].[dbo].[spt_values] (NOLOCK) WHERE [number] = 1 AND [ty
DECLARE @LOW int
SELECT @LOW = LOW
FROM [master].[dbo].[spt_values] (NOLOCK)
WHERE [number] = 1 AND [type] = 'E'
SELECT TableName,[Row Count],[Size (KB)] FROM
(
SELECT QUOTENAME(USER_NAME(o.uid)) + '.' +
QUOTENAME(OBJECT_NAME(i.id))
AS TableName
,SUM(i.rowcnt) [Row Count]
,CONVERT(numeric(15,2),
(((CONVERT(numeric(15,2),SUM(i.reserved)) * @LOW) / 1024))) AS [Size (KB)]
FROM sysindexes i (NOLOCK)
INNER JOIN sysobjects o (NOLOCK)
ON i.id = o.id AND
((o.type IN ('U', 'S')) OR o.type = 'U')
WHERE indid IN (0, 1, 255)
GROUP BY
QUOTENAME(USER_NAME(o.uid)) + '.' +
QUOTENAME(OBJECT_NAME(i.id))
HAVING SUM(i.rowcnt) > 0
) AS Z
ORDER BY [Size (KB)] DESC
但这让我有点困惑,因为这只给出了每个表的保留大小。预订的尺寸是多少?如果我对每个数据库表的保留大小求和,则其总和不等于数据库大小。请停止使用向后兼容视图,如sysindexes/sysobjects 这样可能更好,尽管索引/表本身并不能解释数据库中的所有内容
SELECT Size_In_MB = SUM(reserved_page_count)*8/1024.0
FROM sys.dm_db_partition_stats
WHERE OBJECT_NAME([object_id]) NOT IN (N'table1', N'table2');
另外,为什么要忽略非聚集索引?你认为它们对尺寸没有影响吗?您可以在此处添加类似的过滤器,但我不确定您为什么会:
AND index_id IN (0,1,255);
数据库中占用的空间比表要多得多。还要记住,表/数据库的大小是不断变化的。添加、删除行,构建日志以跟踪所做的操作,以便在必要时可以撤消或重做。当这个空间被使用和释放时,它通常不会被释放回文件系统,因为SQL知道它可能再次需要它。SQL将释放空间供自己将来使用,但根据文件系统,该空间仍被数据库使用
SELECT Size_In_MB = SUM(reserved_page_count)*8/1024.0
FROM sys.dm_db_partition_stats
WHERE OBJECT_NAME([object_id]) NOT IN (N'table1', N'table2');