-
1 pièce(s) jointe(s)
[SQL 2005] lenteur TSQL
Bonjour.
je prépare actuellement une migration d'une base de données SQL 2000 vers 2005 de taille importante (129 GO).
il se trouve que je dois modifier la collation de FRENCH_CI_AS en sql 2000 vers FRENCH_CI_AI sur la nouvelle base 2005, aussi, une simple utilisation des assistants de migration n'est PAS envisageable..
j'ai testé une première solution qui fonctionne mais est lente (10h environ pour achever la migration ) :
* re-création de la base avec la bonne collation sans les contraintes ni indexs
* transfert des données par script
* retablissement des contraintes, index et recréation des catalogues de texte intégral.
Cette formule fonctionne bien et les performances sont normales sur la base de données de destination, mais elle suppose un arret production trop important.
J'ai donc testé une seconde méthode :
* restauration de la base dans SQL 2005
* suppression des indexs de texte intégral
* modification de la collation au niveau base et colonnes.
* recréation des catalogues full text.
j'arrive du coup à une durée totale de l'opération de 4 à 5h, ce qui me conviendrait beaucoup mieux.
Mais le problème est alors le suivant :
si j'exécute le code d'une procédure stocké en direct, la requete demande environ 3 secondes pour s'exécuter, ce qui est dans la norme...
si j'exécute le MEME code exactement, mais placé dans une procédure TSQL par un EXEC avec les MEMES parametres, l'exécution demande près de 10 MINUTES !!!!!!!!
il n'y a par contre aucune lenteur spécialement sur les procédures stockées ne faisant pas appel au full text.
-
1) évitez le type NUMERIC pour les autoincrément. Utilisez le type INT
2) évitez d'utiliser un type NUMERIC sans précision. Utilisez NUMERIC(x, y)
3) évitez d'utiliser un format régional de datetime. Utiliser le format ISO AAAAMMJJ hh:mm:ss.nnn
tout cela oblige à des transptypages implicite qui interdisent l'utilisation des index.
4) évitez d'utiliser des appels de fonction préférez encapsuler cela dans la requête
5) évitez d'utiliser une structure case lorsque la fonction COALESCE suffit.
Mais pour de plus amples recherches il faudrait la description des tables et des fonctions en jeu.
A +