io uso qualcosa di simile a questo (che sarà anche calcolare la dimensione di XML-indici, ... se 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;
Generalmente i numeri sono superiori a sys.fulltext_index_fragments
, ma se combinati con lo sys.partitions
della tabella, verranno aggiunti ai numeri restituiti da EXEC sys.sp_spaceused @objname = N'schema.TableName';
.
testato con SQL Server 2016, ma la documentazione dice che dovrebbe essere presente dal 2008.
forse questo potrebbe essere utile: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize proprietà) –
* IndexSize * restituisce effettivamente la dimensione del catalogo FTS e un catalogo potrebbe avere più di un indice. Voglio la dimensione di ogni indice individualmente. – Poli