如何获取 sp_spaceused 的 database_size 值?

Posted

技术标签:

【中文标题】如何获取 sp_spaceused 的 database_size 值?【英文标题】:How can i get the database_size value of sp_spaceused? 【发布时间】:2019-01-24 08:44:21 【问题描述】:

我正在尝试获取 SQL Server(数据仓库)的 database_size 值

据我所知,我们有 sp_spaceused 可用于检查 database_size

但我找不到任何解决方案来帮助 grep database_size 值的数量

另一个解决方案是不使用 spaceused,但由于 Azure DWH 不允许 sys.master_file,因此其他解决方案也不起作用。

任何帮助将不胜感激!

【问题讨论】:

看看这个帖子***.com/questions/18014392/…它可能对你有帮助。 谢谢 Suraj。我会检查一下 不幸的是,使用 sys.master_file 提到的所有答案在我的情况下都是不允许的。 也试试这个帖子***.com/questions/13296150/… 糟糕,此版本不支持目录视图“dm_db_partition_stats”。 '(( 【参考方案1】:

当您运行查询EXEC sp_helpdb 时,您将获得整个数据库大小。您还可以在此处传递任何特定的数据库名称。无论您目前在哪个数据库中。

【讨论】:

感谢您的回答。我尝试了您的建议,并收到此错误存储过程 sp_helpdb 不存在或不受支持。我猜 Azure DWH 在我们能做的方面非常有限:( 这可能是一些限制,我已经检查了本地机器。【参考方案2】:

您可以使用几个 DMV 来获取此类信息: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-file-space-usage-transact-sql?view=sql-server-2017

【讨论】:

【参考方案3】:

试试

declare @dbsize as bigint
declare @logsize as bigint

select 
  @dbsize = sum(convert(bigint,case when status & 64 = 0 then size else 0 end))
, @logsize = sum(convert(bigint,case when status & 64 <> 0 then size else 0 end))
from dbo.sysfiles;

select dbSizeInMB = cast((@dbsize + @logsize)*8/1024.0  AS decimal(10,2) );

【讨论】:

它说:此版本不支持目录视图'sysfiles'

以上是关于如何获取 sp_spaceused 的 database_size 值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server使用sp_spaceused查看表记录存在不准确的情况

sqlserver sp_spaceused用法

SQLServer中系统存储过程sp_spaceused

SQLServer中系统存储过程sp_spaceused

SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因

SQL SERVER 临时表能使用EXEC SP_spaceused 查询表大小么