sp_spaceused 如何计算具有 BLOB/溢出/行外类型的表的大小?
Posted
技术标签:
【中文标题】sp_spaceused 如何计算具有 BLOB/溢出/行外类型的表的大小?【英文标题】:How does sp_spaceused calculate the size of tables with BLOB / overflow / out-of-row types? 【发布时间】:2018-06-17 04:11:01 【问题描述】:我的要求是计算我的 SQL Server 数据库中的表大小。
为此,我使用了预定义的 SP,sp_spaceused
。但是,如果我的表中有 BLOB 类型的列(如 varbinary(max)
或 FILESTREAM varbinary(max)
),大小是如何计算的?
案例1:如果表有varbinary(max)
列,大小是否包含二进制数据?
案例2:如果表包含FILESTREAM varbinary(max)
类型列,那么大小是否包含二进制数据?出现这种情况是因为这里的二进制数据存储在 Windows 文件系统中。
你能帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:我认为dba stackexchange 会更好地回答您的问题。但是,我使用以下 SQL 命令来获取表大小:
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255
GROUP BY t.Name, s.Name, p.Rows
ORDER BY t.Name
它适用于 CASE 1,但是我不确定第二种情况。
【讨论】:
感谢@RadimBaca!您的查询对我有用。我也一定会在 DBA 堆栈交换论坛上发布这个......以上是关于sp_spaceused 如何计算具有 BLOB/溢出/行外类型的表的大小?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server使用sp_spaceused查看表记录存在不准确的情况
如何使用 .NET v12 SDK 在 Azure Blob 存储中上传具有指定 ContentType 的 Blob?