Bonjour à tous,
SQL2005 entreprise 9.0.3282
Je rencontre un problème lors d'un plan de maintenance effectuant une reconstruction de l'ensemble de nos indexs.
Ci dessous la commande TSQL (générée depuis l'assistant graphique):
ALTER INDEX [HLW046L2] ON [reflex].[HLW046P] REBUILD WITH ( FILLFACTOR = 80, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = OFF, ONLINE = ON )
note : La table HLW046P est une table de travail très fortement utilisée et très importante (<20 000 000.lignes * x.colonnes).
note ² : nos requêtes utilisent le mode curseur.
1ère question : lorsque les indexs de cette table sont reconstruits, une analyse une heure plus tard m'indique que les indexs sont toujours fragmentés (jusqu'à 90%) ce qui m'inquiète fortement.
J'ai lu dans un des tutoriels (très bien fait) de Frédéric Brouard que sans statistique à jour, les index sont déclarés obsolètes et non utilisés par les requêtes. Ici il ne s'agit que de l'analyse depuis la sys.dm_db_index_physical_stats qui j'espère vérifie les données de fragmentation à chaque sollicitation.
Suis je dans le faux, faut il faire la mise à jour des statistiques immédiatement après la reconstruction des index pour que sys.dm_db_index_physical_stats soit utilisable convenablement et ne retourne pas de données erronées ?
2nde question: malgré l'option ONLINE=ON, lorsque l'index est reconstruit, le schéma de la table change et provoque une erreur sur le curseur en cours (ci dessous le message d'erreur généré depuis notre applicatif). J'ai lu dans un autre tutoriel de Frédéric Brouard que le mode online permettait de garder en ligne l'ancien index. J'imagine qu'au moment de la bascule, online ou pas, on change d'index actif provoquant l'erreur ci dessous. Suis je dans le vrai ?
E--
2008/08/27 14:26:33 =>
[HFIF16][SQL Server.RFXCOOPQAS.reflex] Api Code [16943], Dbm Code [16943], SQLSTATE [42000], Cursor [HFIF16INT_ENTREE]
[Microsoft][SQL Native Client][SQL Server]Impossible d'achever l'opération de curseur parce que le schéma de la table a changé après la déclaration du curseur.
SELECT ITNINI, ITNSIE, ITCAPP, ITCINE, ITCRIE, ITDSIE FROM "REFLEX".HLW046P WHERE (ITNINI = ? AND ITCAPP = ? AND ITCINE = ?) ORDER BY ITNINI ASC, ITCAPP ASC, ITCINE ASC, ITNSIE ASC
4(3371)A('HL')A('16')
Si quelqu'un pouvait m'éclairer sur ces deux points ce serait zuper great
Partager