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 :
- Regénérer le DDL des indexes FULL TEXT (David Baffaleuf) [SQL Server]
- Retrouver les tables dont les stats ne sont plus compilées en automatique (David Baffaleuf) [SQL Server]
- Nouveautés MySQL 8.0 : Les Histogrammes (Capdata team) [MySQL]
- Alter table rebuild (Benjamin VESAN) [SQL Server]
- Déterminer la fréquence horaire d’exécution d’une procédure stockée sous SQL Server (Capdata team) [SQL Server]