5

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

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

+0

Может быть, это может быть полезно: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize свойство) –

+0

* IndexSize * фактически возвращает размер каталога FTS, а каталог может иметь более одного индекса. Я хочу, чтобы размер каждого индекса был индивидуальным. – Poli

ответ

9

Вид в каталоге 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; 

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

+0

Спасибо! Мне нужно некоторое время, чтобы проверить это, поскольку я не работал над этим проектом некоторое время ... – Poli

+0

@Poli да, я не уверен, что привлекло этот вопрос к моему вниманию почти через два года после его запроса. –

+0

Это, кажется, сжатый размер полнотекстовых фрагментов. Посмотрев на 'sys.internal_table', вы можете получить размер сжатых фрагментов и пространство, необходимое для всей полнотекстовой инфраструктуры. См. Мой ответ для примерного запроса. – TheConstructor

1

Если вы после определенного каталога Используйте SSMS - Clik на [База данных] и расширение объектов - Нажмите на [Storage] - Щелкните правой кнопкой мыши на {Конкретная Каталог} - Выберите СВОЙСТВ и нажмите кнопку. В общем TAB .. Вы найдете в каталоге Размер = «пп»

1

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

Смежные вопросы