5

Ho un database SQL 2008 R2 con alcune tabelle su di esso con alcune di queste tabelle definite da un indice full-text. Mi piacerebbe sapere come determinare la dimensione dell'indice di una tabella specifica, al fine di controllare e prevedere la sua crescita.Come determinare la dimensione di un indice full-text su SQL Server 2008 R2?

C'è un modo per farlo?

+0

forse questo potrebbe essere utile: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize proprietà) –

+0

* 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

risposta

9

La vista del catalogo sys.fulltext_index_fragments tiene traccia delle dimensioni di ciascun frammento, indipendentemente dal catalogo, quindi è possibile utilizzare lo SUM in questo modo. Ciò presuppone che il limite di un indice full-text per tabella rimarrà il caso. La seguente query otterrà la dimensione di ciascun indice full-text nel database, sempre indipendentemente dal catalogo, ma è possibile utilizzare la clausola WHERE se si interessa solo di una tabella specifica.

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; 

Si noti inoltre che se il numero di frammenti è elevato, è possibile prendere in considerazione una riorganizzazione.

+0

Grazie! Avrò bisogno di un po 'di tempo per controllare questo dato che non ho lavorato a questo progetto per un po' ... – Poli

+0

@Poli sì, non sono sicuro di cosa abbia portato questa domanda alla mia attenzione quasi due anni dopo che è stato chiesto. –

+0

Questa sembra essere la dimensione umcompressed dei frammenti full-text. Osservando 'sys.internal_table' puoi ottenere la dimensione dei frammenti compressi e lo spazio necessario per il resto dell'infrastruttura full-text. Vedi la mia risposta per una query di esempio. – TheConstructor

1

Se siete dopo un determinato catalogo Utilizzare SSMS - Clik su [Database] ed espandere gli oggetti - Fare clic su [Storage] - Fare clic destro su {} catalogo specifico - Scegli Proprieta e fare clic su. in generale TAB .. Troverete il catalogo Size = 'nn'

1

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.