Будет ли полнотекстовый каталог с изменениями отслеживания: автоматически обновляться, если отслеживание изменений для этой таблицы не включено?

12

У меня есть эта таблица базы данных, которая должна поддерживать полнотекстовый индекс в актуальном состоянии. Однако я не вижу, чтобы это происходило вообще (нет ошибки в журнале, потому что последний журнал, который я вижу, был, когда я запустил его вручную).

Вот что я вижу ...

свойства полнотекстового каталога

но на самом столе ...

введите описание изображения здесь

Может ли это быть причиной того, почему это не происходит автоматически?

MetaGuru
источник
Для ясности, на какой журнал вы ссылаетесь?
Майк Заланский 14.12.15
@mikezalansky это полный текст журнала, который можно найти на(..\MSSQL\Log\SQLFT*)
Кин Шах

Ответы:

14

Вы смотрите не в том месте.

Вы должны проверить, как показано ниже:

введите описание изображения здесь

введите описание изображения здесь

Используя T-SQL ..

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

После этого вы можете проверить статус последней заполненной даты и времени.

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

введите описание изображения здесь

Вставьте некоторые данные ..

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

Теперь вы увидите, что каталог FT обновлен.

введите описание изображения здесь

В журналах ( ..\MSSQL\Log\SQLFT*) также ниже будет сообщение ...

2015-12-14 12: 36: 51.29 spid50s Информация: Полнотекстовое автоматическое заполнение завершено для таблицы или индексированного представления '[AdventureWorks2012]. [HumanResources]. [JobCandidate]' (идентификатор таблицы или индексированного представления '1589580701', идентификатор базы данных ' 5' ). Количество обработанных документов: 1. Количество не выполненных документов: 0. Количество документов, которые будут повторены: 0.

От BOL :

По умолчанию или если вы указываете CHANGE_TRACKING AUTO, полнотекстовый движок использует автоматическое заполнение полнотекстового индекса. После завершения первоначального полного заполнения изменения отслеживаются по мере изменения данных в базовой таблице, а отслеживаемые изменения распространяются автоматически. Однако полнотекстовый индекс обновляется в фоновом режиме, поэтому распространенные изменения могут не сразу отражаться в индексе .

По умолчанию SQL Server полностью заполняет новый полнотекстовый индекс сразу после его создания. Тем не менее, полное население может потреблять значительное количество ресурсов. Следовательно, при создании полнотекстового индекса в периоды пиковой нагрузки часто рекомендуется откладывать заполнение до непикового времени, особенно если базовая таблица полнотекстового индекса велика. Однако полнотекстовый каталог, к которому принадлежит индекс, не может использоваться до тех пор, пока не будут заполнены все его полнотекстовые индексы.

Также обратитесь к разделу «Повышение производительности полнотекстовых индексов».

Кин Шах
источник
Спасибо! Проблема, на которую я смотрю, заключается в том, почему она вообще не обновляется, пока я не перестрою индекс вручную. Не уверен, что это связано, но база данных, которая, кажется, имеет эту проблему, является зеркальной.
MetaGuru 14.12.15
Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.Вы установили это согласно тому, что я показал. Если есть много изменений, то это займет некоторое время, так какThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Кин Шах
да, я проверил места, которые вы показывали, и он был правильно настроен, как в ваших примерах ... странно, хотя в последний раз в журналах сообщалось, что этот индекс обновлялся некоторое время назад, даже недели, сравните с последним, когда были добавлены новые строки Это будет работать, когда новые строки добавляются в соответствии с этим правом?
MetaGuru 14.12.15
1
Да .. Я проверил, а затем опубликовал как ответ
Кин Шах
1

По какой-то причине полнотекстовый индексатор прекратил автоматическое заполнение одной из моих баз данных SQL 2012 после того, как моя вторичная реплика базы данных группы доступности вступила во владение и стала основной репликой.

После удаления полнотекстового индекса и его повторного создания в таблице с автоматическим заполнением он снова начал заполняться автоматически. Я использовал SQL Management Studio и мастер создания полнотекстового индекса, чтобы воссоздать индекс.

Я беспокоился о том, сколько времени потребуется для полной индексации данных. Я был приятно удивлен, что для переиндексации 3 текстовых столбцов из таблицы с 547619 записями потребовалось всего около 5 минут.

Упомянутые в вопросе параметры отслеживания изменений на уровне таблицы остаются отключенными. Таким образом, отслеживание изменений полнотекстового индекса определенно отличается от настройки отслеживания изменений таблицы. Вам НЕ нужно включать отслеживание изменений таблиц для автоматической регистрации изменений полнотекстового индексирования и полнотекстового индексирования.

Выполнение следующего запроса из базы данных покажет, когда ваш полнотекстовый индексатор в последний раз выполнял сканирование.

  SELECT  * FROM sys.fulltext_indexes

Когда автозаполнение включено, crawl_end_date должен измениться после того, как вы вставите данные в таблицу.

Кроме того, вы заметите, что когда вы запускаете запрос, который использует полнотекстовый индекс, он покажет последние данные:

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

Дополнительные ссылки:

Статья, описывающая различные методы популяции полнотекстового поиска: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Информация о запросе полнотекстовой индексированной таблицы: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#queries

Статья об архитектуре полнотекстового поиска: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

WWC
источник