Наш веб-сайт имеет базу данных SQL Server 2008 R2 Express Edition с полнотекстовой индексацией для поиска по нашему веб-сайту. Каждый раз, когда новая запись добавляется или обновляется в одной из проиндексированных таблиц, процесс индексации никогда не завершается.
В течение последних нескольких недель я отслеживал состояние, используя в основном тот же запрос, что и на этом сайте: http://www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this. -population взятие столь долго
Вот что я вижу, когда запускаю запрос (нажмите для увеличения):
Самые новые записи в индексированных таблицах никогда не завершаются и не доступны для поиска. Несмотря на то, что в таблицах не так много данных, я ждал дни, чтобы увидеть, завершится ли индексация, но ничего не меняется.
Единственный способ успешно завершить индексирование - это перестроить каталог или удалить и заново создать все индексы.
Каждый раз, когда я это делал, одна и та же проблема возвращалась, как только добавлялась первая новая запись.
Вот статистика сервера на всякий случай:
- Четырехъядерный процессор AMD Opteron 2,34 ГГц
- 4 ГБ ОЗУ
- Windows Server 2008 R2 Enterprise SP1 x64
- SQL Server 2008 R2 Express Edition с расширенными службами x64
Вот скрипт, который я создал с использованием курсоров для перестроения и заполнения полных индексов для любой таблицы, в которой есть один для MSSQL2008. Это работает в производственной среде с базами данных, перенесенными с сервера MSSQL 2000. Я отключил отслеживание изменений и просто запустил эту хранимую процедуру через агент SQL Server. Если вы использовали экспресс, вы могли бы использовать сценарий VBS для запуска его через планировщик задач.
В сценарии было важно выполнить перестройку сначала для каждого каталога, прежде чем пытаться заполнить индексы.
У кого-нибудь есть метод, который не требует курсоров?
источник
Обычно рекомендуется обновить полнотекстовый каталог с помощью триггеров. Это подход, который я использую в mssql, но в моем случае, поскольку у меня есть локализованное приложение с несколькими особыми требованиями, которые приводят меня к решению с использованием триггеров, эти решения работают на 100% начиная с двух лет назад.
Просмотрите вашу реализацию на этом примере .
источник
Не уверен, что коренная причина в вашей ситуации, но это может произойти после резервного копирования. Не уверен, что именно так происходит в вашем случае или чем эта таблица отличается от других. Теперь ты мне любопытен. У вас включена репликация SQL?
Для временного исправления я бы выполнил «Сканирование» (заполнение) таблицы, когда это произойдет.
http://msdn.microsoft.com/en-us/library/ms142575(v=sql.105).aspx
Используйте этот код:
источник