Как 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, однако я не уверен насчет второго случая.

Другие вопросы по тегам