utilizo algo similar a esto (que también calcular el tamaño de XML-índices, ... si está presente)
SELECT S.name,
SO.name,
SIT.internal_type_desc,
rows = CASE WHEN GROUPING(SIT.internal_type_desc) = 0 THEN SUM(SP.rows)
END,
TotalSpaceGB = SUM(SAU.total_pages) * 8/1048576.0,
UsedSpaceGB = SUM(SAU.used_pages) * 8/1048576.0,
UnusedSpaceGB = SUM(SAU.total_pages - SAU.used_pages) * 8/1048576.0,
TotalSpaceKB = SUM(SAU.total_pages) * 8,
UsedSpaceKB = SUM(SAU.used_pages) * 8,
UnusedSpaceKB = SUM(SAU.total_pages - SAU.used_pages) * 8
FROM sys.objects SO
INNER JOIN sys.schemas S ON S.schema_id = SO.schema_id
INNER JOIN sys.internal_tables SIT ON SIT.parent_object_id = SO.object_id
INNER JOIN sys.partitions SP ON SP.object_id = SIT.object_id
INNER JOIN sys.allocation_units SAU ON (SAU.type IN (1, 3)
AND SAU.container_id = SP.hobt_id)
OR (SAU.type = 2
AND SAU.container_id = SP.partition_id)
WHERE S.name = 'schema'
--AND SO.name IN ('TableName')
GROUP BY GROUPING SETS(
(S.name,
SO.name,
SIT.internal_type_desc),
(S.name, SO.name), (S.name),())
ORDER BY S.name,
SO.name,
SIT.internal_type_desc;
Esto generalmente dará números superiores a sys.fulltext_index_fragments
, pero cuando se combina con el sys.partitions
de la tabla, se sumará a los números devueltos desde EXEC sys.sp_spaceused @objname = N'schema.TableName';
.
probado con SQL Server 2016, pero la documentación dice que debe estar presente desde 2008.
Tal vez esto podría ser útil: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize propiedad) –
* IndexSize * realmente devuelve el tamaño del Catálogo FTS y un catálogo puede tener más de un índice. Quiero el tamaño de cada índice individualmente. – Poli