Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono problemy, które mogą wystąpić podczas pracy z wieloma indeksami pełnotekstowymi i rozwiązaniami rozwiązania tych problemów.
Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 4045273
Symptomy
Załóżmy, że na serwerze jest zainstalowany program Microsoft SQL Server. Rozważ następujące scenariusze:
Scenariusz 1:
Istnieje kilka indeksów pełnotekstowych w co najmniej jednej bazie danych, a populacja tych indeksów pełnotekstowych kończy się niemal w tym samym czasie.
Scenariusz 2:
Tworzysz wykaz pełnotekstowy zawierający wiele indeksów pełnotekstowych, a populacja tych indeksów pełnotekstowych kończy się niemal w tym samym czasie.
Scenariusz 3.
Ponownie skompilujesz co najmniej jeden wykaz pełnotekstowy, w którym kilka indeksów kończy wypełnianie w czasie lub w pobliżu.
Scenariusz 4.
Należy ręcznie uruchomić
ALTER FULLTEXT CATALOG REORGANIZE
katalog zawierający wiele indeksów pełnotekstowych.
W dowolnej z tych sytuacji, jeśli włączysz flagę śledzenia (TF) 7603, aby wyświetlić pełne rejestrowanie dla populacji pełnotekstowej w dzienniku błędów programu SQL Server, zobaczysz komunikaty podobne do następujących:
Data/godzina SPIDIFTS: CFTWICrawl::Close, pełne przeszukiwanie zostało zakończone, planowanie scalania głównego dla typu przeszukiwania: 1, DBid 7, catid 5, tid 13847411
Date/Time SPID CFTMasterMergeListManager::QueueMasterMerge queued MM item for DBid 7, catalog 5, tblid 13847411
Date/Time SPID IFTS: CFTWIAutoCrawlFullPass::ExecUnit::D oUnitWork: Znaleziono istniejące przeszukiwanie, więc wróć bez pełnego przekazywania autocrawl, DBid 7 Catid 5 Objid 13847411
Ponadto zobaczysz 30-minutowe oczekiwanie na scalenie wzorca, a raporty dziennika, które scaliły wzorzec, zostało przerwane:
Data/godzina IFTS SPID: Elementy robocze scalania głównego zostały przerwane, ponieważ czekało wstępnie przez ponad 30 minut m_DBid 7, m_objid 13847411
Operacja scalania wzorca alertu SPID daty/godziny nie została wykonana dla rekordu DBid 7, 13847411 objid, więc wykonywanie zapytań względem indeksu będzie powolne. Uruchom polecenie alter fulltext catalog reorganize.
Date/Time SPID CFTMasterMergeListManager::RemoveMasterMerge wydany element MM dla DBid 7, wykaz 5, tblid 13847411
Data/godzina SPID Scalanie wzorca rozpoczęło się na końcu pełnego przeszukiwania tabeli lub widoku indeksowanego "[DB1]. [dbo]. [Table1]" nie powiodło się z HRESULT = '0x80000049'. Identyfikator bazy danych to "7", identyfikator tabeli to 13847411, identyfikator wykazu: 5.
Przyczyna
Scalanie wzorca jest uruchamiane automatycznie na końcu pełnej lub przyrostowej populacji na indeks. Proces scalania głównego zmniejsza liczbę fragmentów indeksu pełnotekstowego, aby zapytania korzystające z indeksu pełnotekstowego stały się negatywnie dotknięte wydajnością indeksu pełnotekstowego.
Główny proces scalania używa wielu wątków w celu zmniejszenia fragmentacji na indeks pełnotekstowy. Program SQL Server ogranicza liczbę współbieżnych scaleń głównych, które są uruchamiane w tym samym czasie. Po osiągnięciu progu każdy indeks pełnotekstowy, który próbuje uruchomić scalanie wzorca, będzie mieć 30-minutowe opóźnienie oczekiwania. Aktualizacja indeksu pełnotekstowego nie zostanie uruchomiona w tym okresie oczekiwania. Scalanie wzorca zostanie wznowione, jeśli wystąpi jedna z następujących dwóch czynności:
Po zakończeniu kolejnej pomyślnej populacji przyrostowej i pomyślnym uruchomieniu scalania głównego.
Ręcznie uruchom scalanie wzorca, uruchamiając następujące polecenie:
ALTER FULLTEXT CATALOG catalog_name REORGANIZE
Uwaga 16.
Powyższe dwie opcje mogą nadal osiągać limit scalania głównego w zależności od liczby scalania wzorca uruchomionego w tym czasie.
Rozwiązanie
Aby obejść ten proces, wypróbuj następujące metody:
Metoda 1 (zalecana): ogranicz liczbę indeksów pełnotekstowych w tym samym wykazie. Zalecamy co najmniej 7. Duże tabele powinny znajdować się we własnym wykazie pełnotekstowym. Jest to najlepsze rozwiązanie w zakresie wydajności podczas ponownego kompilowania lub reorganizacji indeksów. Ta metoda może pomóc, gdy Change_tracking jest automatycznie.
Metoda 2. Ustaw Change_Tracking na Ręczne, używając następującego polecenia:
ALTER FULLTEXT INDEX ON table_name set Change_tracking = Manual
Następnie utwórz zadania programu SQL Server, aby rozłożyć się podczas uruchamiania populacji przyrostowych. Powoduje to mniejsze nakładanie się podczas uruchamiania scalania głównego po populacji indeksu.