我有一个 SQL 2008 R2 数据库,上面有一些表,其中一些表定义了全文索引。我想知道如何确定特定表的索引大小,以便控制和预测它的增长。
有没有办法做到这一点?
我有一个 SQL 2008 R2 数据库,上面有一些表,其中一些表定义了全文索引。我想知道如何确定特定表的索引大小,以便控制和预测它的增长。
有没有办法做到这一点?
目录视图sys.fulltext_index_fragments
跟踪每个片段的大小,而不考虑目录,因此您可以采用SUM
这种方式。这假设每个表只有一个全文索引的限制将保持不变。以下查询将为您提供数据库中每个全文索引的大小,同样与目录无关,但WHERE
如果您只关心特定表,则可以使用该子句。
SELECT
[table] = OBJECT_SCHEMA_NAME(table_id) + '.' + OBJECT_NAME(table_id),
size_in_KB = CONVERT(DECIMAL(12,2), SUM(data_size/1024.0))
FROM sys.fulltext_index_fragments
-- WHERE table_id = OBJECT_ID('dbo.specific_table_name')
GROUP BY table_id;
另请注意,如果片段数很高,您可能会考虑进行重组。
如果您在使用特定目录使用 SSMS - 单击 [Database] 并展开对象 - 单击 [Storage] - 右键单击 {Specific Catalogue} - 选择属性并单击。IN General TAB.. 你会发现 Catalog Size = 'nn'
我使用与此类似的东西(它还将计算 XML 索引的大小,......如果存在)
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;
这通常会给出高于 的数字sys.fulltext_index_fragments
,但是当与sys.partitions
表的 结合时,它将加起来从 返回的数字EXEC sys.sp_spaceused @objname = N'schema.TableName';
。
使用 SQL Server 2016 进行测试,但文档说它应该自 2008 年以来就存在。