Czy katalog pełnotekstowy ze zmianami śledzenia: AUTO aktualizuje się automatycznie, jeśli śledzenie zmian dla tej tabeli nie jest włączone?

12

Mam tę tabelę bazy danych, która powinna aktualizować indeks pełnotekstowy. Jednak w ogóle nie widzę, aby się to działo (brak błędu w dzienniku, ponieważ ostatni dziennik, który widzę, był wtedy, gdy uruchomiłem go ręcznie).

Oto, co widzę ...

właściwości katalogu pełnotekstowego

ale na samym stole ...

wprowadź opis zdjęcia tutaj

Czy może dlatego nie dzieje się to automatycznie?

MetaGuru
źródło
Dla jasności, do którego dziennika się odnosisz?
Mike Zalansky,
@ mikezalansky to dziennik pełnotekstowy, który można znaleźć pod adresem(..\MSSQL\Log\SQLFT*)
Kin Shah,

Odpowiedzi:

14

Patrzysz w złe miejsce.

Musisz sprawdzić, jak poniżej:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Korzystanie z T-SQL ..

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

Po zakończeniu możesz sprawdzić status ostatniej wypełnionej daty / godziny

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

wprowadź opis zdjęcia tutaj

Wstaw trochę danych ..

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

Teraz zobaczysz, że Katalog FT został zaktualizowany.

wprowadź opis zdjęcia tutaj

W logach ( ..\MSSQL\Log\SQLFT*) również poniżej pojawi się komunikat ...

2015-12-14 12: 36: 51.29 spid50s Informacyjny: Wypełnianie automatycznego pełnego tekstu dla widoku tabeli lub indeksowanego „[AdventureWorks2012]. [HumanResources]. [JobCandidate]” (identyfikator widoku tabeli lub indeksowanego „1589580701”, identyfikator bazy danych ” 5 '). Liczba przetworzonych dokumentów: 1. Liczba dokumentów nieudanych: 0. Liczba dokumentów, które zostaną ponowione: 0.

Z BOL :

Domyślnie lub jeśli podasz CHANGE_TRACKING AUTO, aparat pełnotekstowy korzysta z automatycznego zapełniania indeksu pełnotekstowego. Po zakończeniu początkowej pełnej populacji zmiany są śledzone, gdy dane są modyfikowane w tabeli podstawowej, a śledzone zmiany są propagowane automatycznie. Indeks pełnotekstowy jest jednak aktualizowany w tle, więc propagowane zmiany mogą nie zostać natychmiast odzwierciedlone w indeksie .

Domyślnie SQL Server wypełnia nowy indeks pełnotekstowy w pełni, jak tylko zostanie utworzony. Jednak pełna populacja może zużywać znaczną ilość zasobów. Dlatego podczas tworzenia indeksu pełnotekstowego w okresach szczytu często najlepszą praktyką jest opóźnianie pełnego zapełniania do czasu poza szczytem, ​​szczególnie jeśli tabela bazowa indeksu pełnotekstowego jest duża. Jednak katalog pełnotekstowy, do którego należy indeks, nie jest użyteczny, dopóki wszystkie jego indeksy pełnotekstowe nie zostaną wypełnione.

Zobacz też Poprawianie wydajności indeksów pełnotekstowych

Kin Shah
źródło
Dzięki! Problem, na który patrzę, dlaczego nie wydaje się w ogóle aktualizować, dopóki ręcznie nie odbuduję indeksu. Nie jestem pewien, czy jest to powiązane, ale baza danych, która wydaje się mieć ten problem, jest również kopią lustrzaną.
MetaGuru,
Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.ustawiłeś to zgodnie z tym, co pokazałem. Jeśli jest wiele zmian, to zajmie to trochę czasu, ponieważThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah
tak, sprawdziłem pokazane miejsca i został poprawnie skonfigurowany, jak w twoich przykładach ... dziwnie, chociaż ostatnie logi mówią, że ten indeks był aktualizowany jakiś czas temu, a nawet tygodnie, w porównaniu z ostatnim dodaniem nowych wierszy .. Czy działałoby, gdy nowe wiersze są DODAWANE zgodnie z tym prawem?
MetaGuru,
1
Tak .. Przetestowałem, a następnie opublikowałem jako odpowiedź.
Kin Shah,
1

Z jakiegoś powodu indeksator pełnotekstowy przestał automatycznie wypełniać jedną z moich baz danych SQL 2012 po przejęciu repliki bazy danych drugorzędnej grupy dostępności i stał się repliką podstawową.

Po usunięciu indeksu pełnotekstowego i ponownym utworzeniu go na stole z włączonym automatycznym wypełnianiem, zaczął on ponownie automatycznie wypełniać. Do odtworzenia indeksu użyłem SQL Management Studio i kreatora tworzenia indeksu pełnotekstowego.

Martwiłem się, jak długo zajmie pełne indeksowanie danych. Byłem mile zaskoczony, że ponowneindeksowanie 3 kolumn tekstowych z tabeli z 547619 rekordami zajęło tylko około 5 minut.

Ustawienia śledzenia zmian na poziomie tabeli, o których mowa w pytaniu, pozostały wyłączone. Tak więc śledzenie zmian indeksu pełnotekstowego zdecydowanie różni się od ustawienia śledzenia zmian tabeli. NIE musisz mieć włączonego śledzenia zmian tabeli, aby funkcja automatycznego śledzenia zmian pełnego indeksowania tekstu i indeksowania pełnego tekstu działała.

Uruchomienie następującego zapytania z bazy danych ujawni, kiedy indeksator pełnego tekstu uruchomił indeksowanie.

  SELECT  * FROM sys.fulltext_indexes

Gdy funkcja automatycznego wypełniania jest włączona, data crawl_end_date powinna się zmienić po wstawieniu danych do tabeli.

Zauważysz również, że po uruchomieniu zapytania korzystającego z indeksu pełnotekstowego zostaną wyświetlone najnowsze dane:

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

Dodatkowe referencje:

Artykuł opisujący różne metody wyszukiwania pełnotekstowego: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Informacje na temat wysyłania zapytań do tabeli indeksowanej pełnego tekstu: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#queries

Artykuł na temat architektury wyszukiwania pełnotekstowego: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

WWC
źródło