Как sp_spaceused вычисляет размер таблиц с типами BLOB / overflow / out-of-row?
Мое требование - рассчитать размеры таблиц в моей базе данных SQL Server.
Для этого я использую предопределенный SP, sp_spaceused
, Но если в моей таблице есть столбцы типа BLOB (например, varbinary(max)
или же FILESTREAM varbinary(max)
) как рассчитывается размер?
СЛУЧАЙ 1: Если таблица имеет
varbinary(max)
В столбце указан размер двоичных данных?СЛУЧАЙ 2: Если таблица содержит
FILESTREAM varbinary(max)
тип столбца, то размер включает двоичные данные? Этот случай возникает потому, что здесь двоичные данные хранятся в файловой системе Windows.
Не могли бы вы помочь мне в этом?
1 ответ
Я думаю, что на ваш вопрос лучше ответить в https://dba.stackexchange.com/. Однако я использую следующую команду 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
Это работает для случая 1, однако я не уверен насчет второго случая.