Um catálogo de texto completo com trilha será alterado: AUTO será atualizado automaticamente se o acompanhamento de alterações para essa tabela não estiver ativado?

12

Eu tenho essa tabela de banco de dados que deve manter o índice de texto completo atualizado. No entanto, eu não estou vendo isso acontecer (nenhum erro no log, porque o último log que vi foi quando o disparei manualmente).

Aqui está o que estou vendo ...

propriedades do catálogo de texto completo

mas na mesa em si ...

insira a descrição da imagem aqui

Poderia ser por isso que não está acontecendo automaticamente?

MetaGuru
fonte
Para maior clareza, a qual log você está se referindo?
Mike Zalansky
@mikezalansky é o log de texto completo que pode ser encontrado em #(..\MSSQL\Log\SQLFT*)
Kin Shah

Respostas:

14

Você está olhando para o lugar errado.

Você deve verificar como abaixo:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Usando T-SQL ..

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

Depois de concluído, você pode verificar o status da última data e hora preenchida

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

insira a descrição da imagem aqui

Inserir alguns dados ..

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

Agora você verá que o catálogo FT está atualizado.

insira a descrição da imagem aqui

Nos logs ( ..\MSSQL\Log\SQLFT*) também, abaixo será apresentada a mensagem ...

2015-12-14 12: 36: 51.29 spid50s Informativo: preenchimento automático de texto completo para tabela ou exibição indexada '[AdventureWorks2012]. [HumanResources]. [JobCandidate]' (ID da tabela ou exibição indexada '1589580701', ID do banco de dados ' 5 '). Número de documentos processados: 1. Número de documentos com falha: 0. Número de documentos que serão tentados novamente: 0.

De BOL :

Por padrão, ou se você especificar CHANGE_TRACKING AUTO, o Mecanismo de Texto Completo usará preenchimento automático no índice de texto completo. Depois que a população inicial completa é concluída, as alterações são rastreadas à medida que os dados são modificados na tabela base e as alterações rastreadas são propagadas automaticamente. O índice de texto completo é atualizado em segundo plano, no entanto, portanto, as alterações propagadas podem não ser refletidas imediatamente no índice .

Por padrão, o SQL Server preenche totalmente um novo índice de texto completo assim que ele é criado. No entanto, uma população completa pode consumir uma quantidade significativa de recursos. Portanto, ao criar um índice de texto completo durante os períodos de pico, geralmente é uma prática recomendada adiar a população completa até um horário fora do pico, principalmente se a tabela base de um índice de texto completo for grande. No entanto, o catálogo de texto completo ao qual o índice pertence não é utilizável até que todos os seus índices de texto completo sejam preenchidos.

Além disso, consulte Melhorar o desempenho de índices de texto completo

Kin Shah
fonte
Obrigado! O problema que estou analisando é o motivo pelo qual ele não parece ser atualizado até eu recriar manualmente o índice. Não tenho certeza se está relacionado, mas o banco de dados que parece ter esse problema é o que também está sendo espelhado.
MetaGuru
Issue I am looking at is why it doesn't seem to update at all until I manually rebuild the index.você definiu de acordo com o que eu mostrei. Se houver muitas mudanças, isso levará algum tempo, desde queThe full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.
Kin Shah
sim, verifiquei os lugares que você mostrou e foi configurado corretamente, como nos seus exemplos ... estranhamente, a última vez que os logs dizem que esse índice foi atualizado foi há um tempo atrás, semanas até, comparando com a última vez que novas linhas foram adicionadas .. seria executado quando novas linhas forem adicionadas de acordo com esse direito?
MetaGuru
1
Sim. Eu testei e depois postei como resposta.
Kin Shah
1

Por alguma razão, o indexador de texto completo parou de preencher automaticamente um dos meus bancos de dados SQL 2012 após a réplica secundária do banco de dados do Grupo de Disponibilidade assumir o controle e se tornar a réplica primária.

Após excluir o Índice de texto completo e recriá-lo na tabela com preenchimento automático ativado, ele começou a preencher automaticamente novamente. Eu usei o SQL Management Studio e o Assistente de criação de índice de texto completo para recriar o índice.

Eu estava preocupado com quanto tempo levaria para executar uma indexação completa dos dados. Fiquei agradavelmente surpreso que levou apenas 5 minutos para reindexar 3 colunas de texto de uma tabela com 547619 registros.

As configurações de rastreamento de alterações no nível da tabela mencionadas na pergunta permaneceram desativadas. Portanto, o rastreamento de alterações do Índice de texto completo é definitivamente diferente da configuração de rastreamento de alterações da tabela. NÃO é necessário ter o rastreamento de alterações de tabela ativado para que o rastreamento de alterações de indexação de texto completo e a indexação de texto completo funcionem automaticamente.

A execução da seguinte consulta no banco de dados revelará a última vez em que o indexador de texto completo executou um rastreamento.

  SELECT  * FROM sys.fulltext_indexes

Quando o preenchimento automático está ativado, o crawl_end_date deve mudar após a inserção dos dados na tabela.

Além disso, observe que, quando você executa uma consulta que usa o índice de texto completo, ela mostra os dados mais recentes:

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

Referências adicionais:

Artigo que descreve diferentes métodos da População de pesquisa de texto completo: https://msdn.microsoft.com/en-us/library/ms142575%28v=sql.100%29.aspx

Informações sobre como consultar uma tabela indexada em texto completo: https://technet.microsoft.com/pt-br/library/ms142571(v=sql.110).aspx#queries

Artigo sobre arquitetura de pesquisa de texto completo: https://technet.microsoft.com/en-us/library/ms142571(v=sql.110).aspx#architecture

WWC
fonte