Contexte
Je suis en train de migrer une base de données 160 Go de MSSQL 2008 (standard) sur un serveur Win 2008 avec 48 Go de RAM vers un nouveau serveur exécutant MSSQL 2012 (édition Web 64 bits) sur Win 2012 avec 64 Go de RAM. L'ancien serveur est actif et sous charge; le nouveau serveur n'est pas en production. Le nouveau serveur dispose de 8 fichiers tempdb (4 Go chacun).
Problème
Lors des tests sur le nouveau serveur, je constate que les étapes de nombreuses requêtes provoquent des alertes mentionnant "l'opérateur a utilisé tempdb pour renverser les données pendant l'exécution". J'ai pu éviter les tris en réécrivant certaines des requêtes, mais cela ne résout pas vraiment le problème. Les mêmes requêtes sur l'ancien serveur ne provoquent pas de déversements. J'ai lu que les déversements se produisent lorsque MSSQL ne peut pas terminer une opération en mémoire et doit se déverser / page dans tempdb. Dois-je m'inquiéter des déversements?
Exemples
J'ai exécuté sp_updatestats sur la base de données, les statistiques doivent donc être à jour, mais vous remarquerez qu'il existe des écarts entre le nombre estimé et réel de lignes.
Problème de mémoire
J'ai défini un paramètre de mémoire maximale pour MSSQL de 58 sur 64 Go. Actuellement, MSSQL a consommé environ 35 Go de cette mémoire, mais dispose d'un ensemble fonctionnel de seulement 682 Mo. L'ancien serveur (quoique en production, en charge de la charge) dispose de 44 Go de mémoire dédiée à MSSQL dont 43,5 Go dans son jeu de travail.
Je ne sais pas si les déversements pourraient être liés à un paramètre de mémoire - quelqu'un a-t-il des idées? MSSQL dispose actuellement de plusieurs hectares de RAM, alors pourquoi se répand-il dans tempdb pour certaines sortes et correspondances de hachage?