Bonjour,
J'ai une série de scripts sql qui tourne sous SQL Server 2008R2 via des batchs en utilisant l'utilitaire osql.exe.
Ça fonctionne comme cela depuis des années (au début c'était même sous SQL Server 2000).
La dernière révision des scripts date de 2011.
Maintenant j'essaye de migrer vers SQL Server 2014 et j'utilise sqlcmd.exe (on me dit qu'il est préférable à osql.exe).
Désormais certains scripts ont des performances catastrophiques.
J'ai essayé d'isoler les requêtes qui poseraient problème, et il semblerait que ce soit l'usage de curseurs qui ne plaisent pas à SQL Server 2014.
Par exemple, j'ai un curseur sur une requête qui renvoi 466000 rows à partir desquels j'en insère 2400000 autres dans une table.
Sous 2008R2 cette requête tourne en 15 minutes environ, soit 2700 insertions par seconde environ.
Sous 2014 cette même requête tourne en une douzaine d'heures , soit 55 insertions par seconde...
C'est incompréhensible.
J'ai bien sûr vérifié les paramétrages entre les deux instances 2008R2 et 2014 (qui tourne sur le même serveur, Windows Server 2008R2).
La mémoire est limitée à 8GB pour les deux (32GB physique sur la machine), la DB temp est déplacée vers le disque D:, le reste est par défaut.
La DB venant de 2008R8 est un backup restauré sous 2014 dont le niveau de compatibilité a été rehaussé à 2014. Modèle de recouvrement simple.
La DB est donc identique à celle d'origine en contenu. Il n'y a pas de store proc.
Une peu d'aide pour essayer de régler ce soucis serait bienvenue.
Merci.
Partager