如何获取 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查看表记录存在不准确的情况