5

Tengo una base de datos de SQL 2008 R2 con algunas tablas con algunas de esas tablas definidas como un Índice de texto. Me gustaría saber cómo determinar el tamaño del índice de una tabla específica, para controlar y predecir su crecimiento.Cómo determinar el tamaño de un índice de texto completo en SQL Server 2008 R2?

¿Hay alguna forma de hacerlo?

+0

Tal vez esto podría ser útil: http://technet.microsoft.com/en-us/library/ms190370.aspx (IndexSize propiedad) –

+0

* IndexSize * realmente devuelve el tamaño del Catálogo FTS y un catálogo puede tener más de un índice. Quiero el tamaño de cada índice individualmente. – Poli

Respuesta

9

La vista de catálogo sys.fulltext_index_fragments realiza un seguimiento del tamaño de cada fragmento, independientemente del catálogo, por lo que puede tomar el SUM de esta manera. Esto supone que la limitación de un índice de texto completo por tabla seguirá siendo el caso. La siguiente consulta obtendrá el tamaño de cada índice de texto completo en la base de datos, nuevamente sin importar el catálogo, pero podría usar la cláusula WHERE si solo le interesa una tabla específica.

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; 

También tenga en cuenta que si el recuento de fragmentos es alto, podría considerar una reorganización.

+0

¡Gracias! Necesitaré algo de tiempo para comprobar esto, ya que no he estado trabajando en este proyecto por un tiempo ... – Poli

+0

@Poli sí, no estoy seguro de qué me llamó la atención sobre esta cuestión casi dos años después de que se me preguntó. –

+0

Este parece ser el tamaño umcompressed de los fragmentos de texto completo. Al mirar 'sys.internal_table' puede obtener el tamaño de los fragmentos comprimidos y el espacio necesario para el resto de la infraestructura de texto completo. Ver mi respuesta para una consulta de ejemplo. – TheConstructor

1

Si estás después de un catálogo específico Use SSMS - Clik en [Base de datos] y ampliar los objetos - Haga clic en [Almacenamiento] - Haga clic derecho en el catálogo específico {} - Elija Propertie y haga clic. en general TAB .. Encontrará el catálogo Tamaño = 'nn'

1

utilizo algo similar a esto (que también calcular el tamaño de XML-índices, ... si está 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; 

Esto generalmente dará números superiores a sys.fulltext_index_fragments, pero cuando se combina con el sys.partitions de la tabla, se sumará a los números devueltos desde EXEC sys.sp_spaceused @objname = N'schema.TableName';.

probado con SQL Server 2016, pero la documentación dice que debe estar presente desde 2008.

Cuestiones relacionadas