Vous avez sans doute, comme moi, utilisé l’outil de performance livré depuis la version 2005 de SQL Server et qui se nomme DTA (Database Tuning Advisor). Chez mon client actuel qui possède une base de données volumineuse en nombre d’objets (environ 15 000 entre les tables, les vues, les index et les statistiques) nous avons rencontré un problème quant à l’utilisation de cet outil en mode console.
DTA, dans ce mode, propose une fonctionnalité intéressante : Il est possible de déporter l’analyse des performances d’une base de données de production sur un autre serveur de test en se basant sur les métadonnées du serveur de production et sans avoir à récupérer l’ensemble des données de la base de production. Cela signifie que la machine de test peut être sous dimensionnée par rapport au serveur de production, en terme de matériel et de place disque.
DTA en mode console procède en plusieurs étapes pour proposer ses recommandations. L’outil se connecte dans un premier temps à la base de données cible et récupère l’ensemble des informations qui lui seront nécessaires (objets, index, statistiques, informations du serveur .) en mémoire et les recopie sur le serveur de test en créant une base de données qui sera l’image de la base de données cible. C’est la phase de clonage. DTA procède ensuite à l’étude de la base de données sur le serveur de test en fonction de la charge ou des scripts fournis et aux contraintes de paramétrage de l’utilisateur.
C’est dans cette première phase que nous avons rencontré le problème. Il faut savoir que les outils clients de SQL Server fonctionnement en mode 32 bits et ceci quelle que soit la version de SQL Server (2000, 2005, 2008) et le type d’architecture (x86, x64 .). Cela signifie que l’utilisation de la mémoire par DTA est limitée. En version 32 bits, celle-ci est limitée à 4Go max (Donc 2Go à 3Go max pour le process sqlservr.exe). Notre base étant trop volumineuse, nous obtenions des erreurs de type MemoryOutException. Je remercie au passage le support Microsoft qui nous a aidé pour diagnostiquer le problème.
Nous avons donc utilisé une solution de contournement : Utiliser un serveur test, une base de données de test (image de la base de données de production à partir d’une sauvegarde) et utiliser DTA en mode graphique. Ce mode permet de nous affranchir de cette première phase de récupération des métadonnées sur le serveur de production.
Est ce que les outils clients de SQL Server fonctionneront en 64 bits dans un proche avenir ? Apparemment pas pour le moment m’a précisé le support Microsoft. Nous ne pouvons même pas espérer pour la future version 2010
J’espère que cette information pourra servir à d’autres au cas où …
David BARBARIN (Mikedavem)
Elève ingénieur CNAM Lyon
Bonjour David B.,
Je parlais bien de la version 32 bits mais en me relisant cela peut porter à confusion. En fait je suis parti du calcul bête et méchant : 2^32 = 4GB mais effectivement ces 4GB sont partagés entre les process kernel et les process users donc de base 2GB / 2GB par défaut. Avec l’option /3GB on passe à 1G / 3GB.
Merci pour ta remarque en tout cas
++
Hello David,
Article intéressant. Par contre il y a qq chose que je trouve curieux: quand tu dis que la mémoire pour dta est limitée à 4Gb, tu te places bien sur un windows 64 bits ? C’est le ‘En version 32 bits (…)’ qui me perturbe. Sur un windows 32, un VAS ne peut excéder 2/3Gb, dta, sqlservr, tous les exe sont concernés. Mais je pense que tu parles de windows 64.
J’ai remarqué de mon côté pas mal d’autres travers dans DTA, notamment lorsqu’il créé ses hypothetical indexes, les seuils de recompilation des objets sont dépassés, et il force un recompile lors des requêtes suivantes (même si tu laisses par défaut le Keep existing PDS). Tu peux le voir avec une session Profiler, c’est imparable.
Merci pour tes articles ! A+
David B.
http://www.capdata.fr
http://www.alldb.fr/blogs