Repeupler un index FullText

Mardi, mai 22, 2012
By Benjamin VESAN in SQL Server (bvesan@capdata-osmozium.com) [41 article(s)]

Cet article concerne un problème rencontré chez l’un de nos clients sur la mise à jour d’un index fulltext :

Voici la question du client (les informations confidentielles sont masquées):
Suite à une plainte d’un client, nous avons découvert que la table TB_appel a un défaut d’indexation FT.

select DISPLAY_TERM
from sys.dm_fts_index_keywords_By_Document (db_id(‘db1′),object_id(‘ TB_appel’))
WHERE document_id = 549118

retourne aucun contenu.

Apparement, depuis le ../..2012, aucune annonce n’a été indéxée en FT.

Pouvez voir ce qui ce passe ?

Voici la méthode de résolution utilisée :

1- je vérifie la requête, effectivement aucune ligne retournée …

2-vérification du type de mise à jour sur l’index :

select * from sys.fulltext_indexes where object_id= object_id('dbo.TB_appel')
object_id   unique_index_id fulltext_catalog_id is_enabled change_tracking_state change_tracking_state_desc     ...
----------- --------------- ------------------- ---------- --------------------- ------------------------------ ...
1694733190  1               13                  1          A                     AUTO                           ...

La propriété change_tracking est bien positionnée à AUTO,
l’index devrait être mis à jour par le moteur en fonction des mises à jour sur la table.

3 – je vérifie l’état  des populations (mise à jour) d’indexes en cours

  -- populations en cours

   select database_id, catalog_id , table_id, population_type_description , status, status_description	
   from sys.dm_fts_index_population where table_id=object_id('TB_appel') and database_id=6
   database_id	catalog_id	table_id	population_type_description	status status_description
   ----------- ----------- ----------- ------------------------------ ------------------ --------
   6	               13	     1694733190	AUTO	                                11	Aborted

La colonne status_description contient la valeur Aborted

4- J’annule la reconstruction sur l’index

  
-- stop la population
  ALTER FULLTEXT INDEX ON dbo.TB_appel SET CHANGE_TRACKING MANUAL;
  Command(s) completed successfully.

5- Je lance une population manuelle de l’index

-- mise à jour de l'index
   set  statistics time on
   ALTER FULLTEXT INDEX ON dbo.TB_appel START UPDATE POPULATION;

   * info - UPDATE : Spécifie le traitement de toutes les insertions, mises à jour ou suppressions depuis la dernière mise à jour de
    l'index de suivi des modifications. Le remplissage du suivi des modifications doit être activé sur une table,
    mais l'index de mise à jour en arrière-plan ou le suivi automatique des modifications doivent être désactivés.

6- Je suis l’avancement de la population de l’index

  
select * from sys.dm_fts_index_population where table_id=object_id('TB_appel')  and database_id=6

  select database_id, catalog_id , table_id, population_type_description , status_description	
  from sys.dm_fts_index_population where table_id=object_id('TB_appel') and database_id=6
  database_id	catalog_id	table_id	population_type_description	status status_description 

database_id      catalog_id           table_id     population_type_description   status_description 
   ----------- -----------       -----------     ---------------------------  ------------------ 
   6                        13           1694733190       MANUAL                          Processing normally ...      

 -- Suivi des ranges de valeurs à mettre à jour

  SELECT ranges.*, ranges.*, OBJECT_NAME (table_id)
   FROM sys.dm_fts_index_population population
   JOIN sys.dm_fts_population_ranges ranges
   ON (population.memory_address = ranges.parent_memory_address)
   WHERE ranges.session_id <> 0
  memory_address     parent_memory_address is_retry session_id processed_row_count error_count
   ------------------ --------------------- -------- ---------- ------------------- ----------- ------------------------------
   0x078B2040         0x055226A8            0        29         6000                0			TB_appel
   0x078B3048         0x055226A8            0        30         6000                0			TB_appel
   => on voit le nombre de lignes traitées

7- Une fois la repopulation de l’indes terminée, je remets l’index en mode CHANGE_TRACKING AUTO

   ALTER FULLTEXT INDEX ON dbo.TB_appel SET CHANGE_TRACKING AUTO;

Continuez votre lecture sur le blog :




Cliquer pour partager cet article sur Viadeo
Cliquer sur "CAPTURER" pour sauvegarder cet article dans Evernote Clip to Evernote

Tags:

Leave a Reply