Nasza strona internetowa ma bazę danych SQL Server 2008 R2 Express Edition z indeksowaniem pełnotekstowym do wyszukiwania w naszej witrynie. Za każdym razem, gdy nowy rekord jest dodawany lub aktualizowany w jednej z indeksowanych tabel, proces indeksowania nigdy się nie kończy.
W ciągu ostatnich kilku tygodni monitorowałem status, używając zasadniczo tego samego zapytania znalezionego na tej stronie: http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this -populacja-tak długo
Oto, co widzę po uruchomieniu zapytania (kliknij, aby wyświetlić pełny rozmiar):
Najnowsze rekordy w indeksowanych tabelach nigdy się nie kończą i nie można ich przeszukiwać. Mimo że w tabelach nie ma zbyt wielu danych, czekałem dni, aby sprawdzić, czy indeksowanie się zakończy, ale nic się nie zmienia.
Jedynym sposobem na pomyślne ukończenie indeksowania jest albo przebudowanie katalogu, albo usunięcie i ponowne utworzenie wszystkich indeksów.
Za każdym razem, gdy to robię, ten sam problem wraca, gdy tylko zostanie dodany pierwszy nowy rekord.
Oto statystyki serwera na wszelki wypadek:
- Czterordzeniowy AMD Opteron 2,34 GHz
- 4 GB pamięci RAM
- Windows Server 2008 R2 Enterprise SP1 x64
- SQL Server 2008 R2 Express Edition z zaawansowanymi usługami x64
Oto skrypt, który utworzyłem za pomocą kursorów, w celu przebudowania i wypełnienia pełnych indeksów dla dowolnej tabeli, która ma jeden dla MSSQL2008. Działa to w środowisku produkcyjnym z bazami danych migrowanymi z serwera MSSQL 2000. Wyłączyłem śledzenie zmian i po prostu uruchomiłem tę procedurę przechowywaną za pośrednictwem agenta SQL Server. Jeśli korzystasz z ekspresu, możesz użyć skryptu VBS, aby uruchomić go za pomocą Harmonogramu zadań.
Ważne było w skrypcie, aby najpierw przebudować każdy katalog przed zapełnieniem indeksów.
Czy ktoś ma metodę, która nie wymaga kursorów?
źródło
Zwykle zaleca się aktualizację katalogu pełnotekstowego przy użyciu wyzwalaczy. Takiego podejścia używam na mssql, ale w moim przypadku, ponieważ mam zlokalizowaną aplikację z kilkoma konkretnymi wymaganiami, które prowadzą mnie do rozwiązania wykorzystującego wyzwalacze, że rozwiązania działają w 100% od 2 lat wstecz.
Przejrzyj swoją implementację na tym przykładzie .
źródło
Nie wiesz, jaka jest główna przyczyna twojej sytuacji, ale może się to zdarzyć po wykonaniu kopii zapasowej. Nie jestem pewien, czy tak dzieje się w twoim przypadku, czy też ten stół różni się od innych. Teraz mnie ciekawi. Czy masz włączoną replikację SQL?
Aby tymczasowo naprawić, wykonam „indeksowanie” (populację) na stole, gdy to się stanie.
http://msdn.microsoft.com/en-us/library/ms142575(v=sql.105).aspx
Użyj tego kodu:
źródło