Как определить размер полнотекстового индекса в SQL Server 2008 R2? - PullRequest
6 голосов
/ 29 января 2011

У меня есть база данных SQL 2008 R2 с несколькими таблицами, в которых для некоторых из этих таблиц определен полнотекстовый индекс. Я хотел бы знать, как определить размер индекса конкретной таблицы, чтобы контролировать и прогнозировать его рост.

Есть ли способ сделать это?

Ответы [ 3 ]

12 голосов
/ 18 сентября 2012

Представление каталога 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;

Также обратите внимание, что если количество фрагментов велико, вы можете подумать о реорганизации.

3 голосов
/ 26 июля 2017

Я использую что-то похожее на это (который также вычислит размер 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 года.

1 голос
/ 14 марта 2014

Если вы после определенного каталога Использовать SSMS - Кликните на [База данных] и раскройте объекты - Нажмите [Хранение] - Щелкните правой кнопкой мыши на {Specific Catalog} - Выберите Свойство и нажмите. В общем TAB .. Вы найдете Размер каталога = 'nn'

...