Un catalogo full-text con Track cambia: AUTO si aggiorna automaticamente se il rilevamento delle modifiche per quella tabella non è abilitato?


12

Ho questa tabella di database che suppone di mantenere aggiornato l'indice full-text. Tuttavia non lo vedo accadere affatto (nessun errore nel registro perché l'ultimo registro che ho visto è stato quando l'ho attivato manualmente).

Ecco cosa sto vedendo ...

proprietà del catalogo full-text

ma sul tavolo stesso ...

inserisci qui la descrizione dell'immagine

Potrebbe essere questo il motivo per cui non sta accadendo automaticamente?


Per chiarezza, a quale registro ti riferisci?
Mike Zalansky,

@mikezalansky è il registro di testo completo che può essere trovato su(..\MSSQL\Log\SQLFT*)
Kin Shah,

Risposte:


14

Stai guardando nel posto sbagliato.

Devi controllare come di seguito:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Utilizzando T-SQL ..

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

Al termine, è possibile verificare lo stato dell'ultimo datetime popolato

-- 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

inserisci qui la descrizione dell'immagine

Inserisci alcuni dati ..

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

Ora vedrai che il catalogo FT è aggiornato.

inserisci qui la descrizione dell'immagine

Nei registri ( ..\MSSQL\Log\SQLFT*), inoltre, sarà visualizzato il messaggio ...

14-12-2015 12: 36: 51.29 spid50s Informativo: Popolazione automatica full-text completata per tabella o vista indicizzata '[AdventureWorks2012]. [Risorse umane]. [JobCandidate]' (ID tabella o vista indicizzata '1589580701', ID database ' 5' ). Numero di documenti elaborati: 1. Numero di documenti non riusciti: 0. Numero di documenti che verranno ritentati: 0.

Da BOL :

Per impostazione predefinita o se si specifica CHANGE_TRACKING AUTO, il motore full-text utilizza la popolazione automatica sull'indice full-text. Una volta completata la popolazione completa iniziale, le modifiche vengono monitorate quando i dati vengono modificati nella tabella di base e le modifiche rilevate vengono propagate automaticamente. L'indice full-text viene aggiornato in background, quindi le modifiche propagate potrebbero non riflettersi immediatamente nell'indice .

Per impostazione predefinita, SQL Server popola completamente un nuovo indice full-text non appena viene creato. Tuttavia, una popolazione completa può consumare una quantità significativa di risorse. Pertanto, quando si crea un indice full-text durante i periodi di punta, è spesso consigliabile ritardare l'intera popolazione fino a un tempo non di punta, in particolare se la tabella di base di un indice full-text è grande. Tuttavia, il catalogo full-text a cui appartiene l'indice non è utilizzabile finché non vengono popolati tutti i suoi indici full-text.

Inoltre, fai riferimento a Migliora le prestazioni degli indici full-text


Grazie! Il problema che sto esaminando è il motivo per cui sembra non aggiornarsi affatto fino a quando non ricostruisco manualmente l'indice. Non sono sicuro che sia correlato, ma il database che sembra avere questo problema di più è quello che viene anche sottoposto a mirroring.
MetaGuru,

Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.hai impostato come da quello che ho mostrato. Se ci sono molti cambiamenti, ci vorrà del tempo, dal momento cheThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah,

Sì, ho controllato i luoghi che hai mostrato ed è stato correttamente configurato come nei tuoi esempi ... stranamente, anche se l'ultima volta che i registri dicono che questo indice è stato aggiornato è stato un po 'di tempo fa, settimane persino, rispetto all'ultima volta che sono state aggiunte nuove righe .. verrà eseguito quando vengono aggiunte nuove righe in base a questo diritto?
MetaGuru,

1
Sì. Ho provato e quindi pubblicato come risposta.
Kin Shah,

1

Per qualche motivo, l'indicizzatore di testo completo ha smesso di funzionare automaticamente per uno dei miei database SQL 2012 dopo che la replica del database del gruppo di disponibilità secondario è subentrata e è diventata la replica primaria.

Dopo aver cancellato l'indice full-text e averlo ricreato sul tavolo con la compilazione automatica attivata, ha iniziato a ripopolare automaticamente. Ho usato SQL Management Studio e la creazione guidata dell'indice di testo completo per ricreare l'indice.

Ero preoccupato per quanto tempo ci vorrebbe per eseguire una completa indicizzazione dei dati. Sono stato piacevolmente sorpreso dal fatto che ci sono voluti solo circa 5 minuti per reindicizzare 3 colonne di testo da una tabella con 547619 record.

Le impostazioni di rilevamento delle modifiche a livello di tabella a cui fa riferimento la domanda sono rimaste disabilitate. Pertanto, il rilevamento delle modifiche dell'indice di testo completo è decisamente diverso dall'impostazione del rilevamento delle modifiche della tabella. NON è necessario che il rilevamento delle modifiche alla tabella sia abilitato affinché il rilevamento delle modifiche dell'indicizzazione del testo completo e l'indicizzazione del testo completo funzionino automaticamente.

L'esecuzione della seguente query dal database rivelerà l'ultima volta che l'indicizzatore di testo completo ha eseguito una ricerca per indicizzazione.

  SELECT  * FROM sys.fulltext_indexes

Quando ilopopolazione è attivo, crawl_end_date dovrebbe cambiare dopo aver inserito i dati nella tabella.

Inoltre, noterai che quando esegui una query che utilizza l'indice di testo completo, mostrerà i dati più recenti:

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

Riferimenti aggiuntivi:

Articolo che descrive i diversi metodi della popolazione di ricerca full-text: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Informazioni sull'interrogazione di una tabella indicizzata full-text: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#queries

Articolo sull'architettura di ricerca full-text: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.