¿Se actualizará automáticamente un catálogo de texto completo con seguimiento: AUTO si no se habilita el seguimiento de cambios para esa tabla?


12

Tengo esta tabla de base de datos que se supone que debe mantener actualizado el índice de texto completo. Sin embargo, no veo que suceda en absoluto (no hay error en el registro porque el último registro que vi fue cuando lo activé manualmente).

Esto es lo que estoy viendo ...

propiedades de catálogo de texto completo

pero en la mesa misma ...

ingrese la descripción de la imagen aquí

¿Podría ser por eso que no está sucediendo automáticamente?


Para mayor claridad, ¿a qué registro te refieres?
Mike Zalansky

@mikezalansky es el registro de texto completo que se puede encontrar en(..\MSSQL\Log\SQLFT*)
Kin Shah

Respuestas:


14

Estás mirando el lugar equivocado.

Tienes que marcar lo siguiente:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Usando T-SQL ..

Use database_name
go
ALTER FULLTEXT INDEX ON schema.table_name SET CHANGE_TRACKING AUTO;

Una vez hecho esto, puede verificar el estado de la última fecha y hora poblada

-- script source : http://stackoverflow.com/a/10505496/1387418
-- Modified by Kin on Dec 14' 2015 to reflect the FTCatalogName
DECLARE @CatalogName VARCHAR(MAX)
SET     @CatalogName = 'AW2008FullTextCatalog' -- change here !

SELECT name as FTCatalogName, 
    DATEADD(ss, FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateCompletionAge'), '1/1/1990') AS LastPopulated
    ,(SELECT CASE FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateStatus')
        WHEN 0 THEN 'Idle'
        WHEN 1 THEN 'Full Population In Progress'
        WHEN 2 THEN 'Paused'
        WHEN 3 THEN 'Throttled'
        WHEN 4 THEN 'Recovering'
        WHEN 5 THEN 'Shutdown'
        WHEN 6 THEN 'Incremental Population In Progress'
        WHEN 7 THEN 'Building Index'
        WHEN 8 THEN 'Disk Full.  Paused'
        WHEN 9 THEN 'Change Tracking' END) AS PopulateStatus
FROM sys.fulltext_catalogs

ingrese la descripción de la imagen aquí

Insertar algunos datos ...

insert into HumanResources.JobCandidate
(BusinessEntityID, Resume, ModifiedDate)
values 
    (4, NULL, DEFAULT)

Ahora verá que el Catálogo FT está actualizado.

ingrese la descripción de la imagen aquí

En los registros ( ..\MSSQL\Log\SQLFT*) también, debajo estará el mensaje ...

2015-12-14 12: 36: 51.29 spid50s Informativo: Población automática de texto completo completada para la tabla o vista indizada '[AdventureWorks2012]. [HumanResources]. [JobCandidate]' (ID de tabla o vista indizada '1589580701', ID de la base de datos ' 5 '). Número de documentos procesados: 1. Número de documentos fallidos: 0. Número de documentos que serán reintentados: 0.

De BOL :

De forma predeterminada, o si especifica CHANGE_TRACKING AUTO, el motor de texto completo utiliza la población automática en el índice de texto completo. Una vez que se completa la población inicial completa, los cambios se rastrean a medida que los datos se modifican en la tabla base y los cambios rastreados se propagan automáticamente. Sin embargo, el índice de texto completo se actualiza en segundo plano, por lo que los cambios propagados podrían no reflejarse inmediatamente en el índice .

De manera predeterminada, SQL Server llena un nuevo índice de texto completo por completo tan pronto como se crea. Sin embargo, una población completa puede consumir una cantidad significativa de recursos. Por lo tanto, cuando se crea un índice de texto completo durante los períodos pico, a menudo es una buena práctica retrasar a la población completa hasta un momento fuera del pico, particularmente si la tabla base de un índice de texto completo es grande. Sin embargo, el catálogo de texto completo al que pertenece el índice no se puede usar hasta que se completen todos sus índices de texto completo.

Además, consulte Mejorar el rendimiento de los índices de texto completo


¡Gracias! El problema que estoy viendo es por qué no parece actualizarse en absoluto hasta que reconstruya manualmente el índice. No estoy seguro de si está relacionado, pero la base de datos que parece tener este problema es la que también se está reflejando.
MetaGuru

Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.¿Lo has configurado según lo que mostré? Si hay muchos cambios, entonces tomará algún tiempo, ya queThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah

Sí, verifiqué los lugares que mostraste y se configuró correctamente como en tus ejemplos ... curiosamente, aunque la última vez que los registros dicen que este índice se actualizó fue hace un tiempo, incluso semanas, en comparación con la última vez que se agregaron nuevas filas ... . se ejecutaría cuando se agreguen nuevas filas de acuerdo con este derecho?
MetaGuru

1
Sí ... probé y luego publiqué como respuesta.
Kin Shah

1

Por alguna razón, el indexador de texto completo dejó de autopoblarse para una de mis bases de datos SQL 2012 después de que mi réplica secundaria de la base de datos del Grupo de disponibilidad se hizo cargo y se convirtió en la réplica principal.

Después de eliminar el índice de texto completo y volver a crearlo en la tabla con el relleno automático activado, comenzó a rellenarse nuevamente. Utilicé el asistente de creación de SQL Management Studio y el índice de texto completo para recrear el índice.

Me preocupaba cuánto tiempo llevaría ejecutar una indexación completa de los datos. Me sorprendió gratamente que solo me llevó unos 5 minutos reindexar 3 columnas de texto de una tabla con 547619 registros.

La configuración de seguimiento de cambios a nivel de tabla a la que se hace referencia en la pregunta permaneció deshabilitada. Por lo tanto, el seguimiento de cambios del índice de texto completo es definitivamente diferente de la configuración de seguimiento de cambios de tabla. NO necesita tener habilitado el seguimiento de cambio de tabla para que la indexación de texto completo El seguimiento de cambios y la indexación de texto completo se llenen automáticamente.

La ejecución de la siguiente consulta desde la base de datos revelará la última vez que su indexador de texto completo ejecutó un rastreo.

  SELECT  * FROM sys.fulltext_indexes

Cuando la función de autopoblación está activada, crawl_end_date debería cambiar después de insertar datos en la tabla.

Además, notará que cuando ejecuta una consulta que usa el índice de texto completo, mostrará los últimos datos:

  select TOP 10 * from YOURDATATABLE where contains((YOUR_indexed_column),'YOURSEARCHTERM') order by YOURPRIMARYKEYCOLUMN desc

Referencias adicionales

Artículo que describe diferentes métodos de población de búsqueda de texto completo: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Información sobre cómo consultar una tabla indizada de texto completo: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#queries

Artículo sobre arquitectura de búsqueda de texto completo: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.