2009-06-05 9 views
1

Notre serveur de base de données principal est une boîte de 8 cœurs avec 8 Go de RAM. Le processeur est un Xeon E7330 @ 2.4GHz. Il fonctionne sous Windows Server 2003 R2 (édition x64) et SQL Server 2005Problème de performances SQL Server

Je voulais effectuer des tests afin de configurer SQL Server 2005 sur un autre serveur tout neuf qui est une boîte 8 cœurs avec 4 Go de RAM. Il a un Xeon X5460 @ 3.16GHz et exécute Windows Server 2003 R2 Standard. J'ai installé SQL Server 2005 prêt à l'emploi et y avez restauré une sauvegarde de la base de données primaire, et j'ai effectué une mise à jour STATISTICS sur toutes les tables.

Le processus que je testais exécute le même proc stocké plusieurs fois. J'ai été stupéfait de constater à partir du profileur que ce proc qui s'exécute avec la durée = 0 ou 1 sur le serveur principal, était constamment exécuté avec des durées supérieures à 130. Cela rend le serveur secondaire inutile à tester, car il est trop lent.

Aucune autre application ne fonctionne sur l'une de ces deux boîtes, juste un serveur SQL. Et contrairement au serveur de base de données primaire, le serveur de test m'avait seulement accès.

Je ne peux pas croire que la différence de spécifications entre ces deux machines explique cette différence colossale de performance. Quelqu'un peut-il suggérer des paramètres que je pourrais avoir besoin de changer?

mises à jour dans les réponses aux questions suivantes:

  1. serveur Second est de 32 bits de Windows
  2. Je renseigner maintenant sur les matrices de disques et la façon dont ils sont
  3. comparables Sur le serveur principal, les données et les journaux sont sur le même lecteur (!) et cela fonctionne bien
  4. En regardant dans le gestionnaire de tâches sur le serveur de test, la CPU tourne à 10%, un seul noyau montrant même une activité

  5. Le gestionnaire de tâches sur le serveur de test (4 Go de RAM) affiche «PF Usage 2.01GB» avec SQL Server en cours d'exécution. Sur le serveur primaire (8GB RAM) il montre "PF Usage 6.67GB". Comment est-ce que je ferais que SQL Server sur la boîte de test utilise plus de RAM? Peut-être que cela ferait une différence

Une autre mise à jour:

Le serveur principal a un RAID-5 avec 15 000 disques RPM. La boîte de test a un RAID-5 avec des lecteurs de 10 000 tr/min.

+2

Comment les systèmes de disque se comparent-ils? RAID-?? Nombre de broches? Que diriez-vous de la façon dont les fichiers de données sont comparés aux journaux? La nouvelle boîte est-elle configurée pour utiliser tous les procs? (maxes à 4 pour std ed je pense) Vérifiez également les plans d'exécution sur les deux serveurs, assurez-vous qu'ils sont les mêmes. – SqlACID

+0

Yup, ça sent comme une mauvaise configuration du disque, par ex. données et se connecter sur le même plateau ou quelque chose comme ça ... –

+0

Est le deuxième, le test, la machine 32 bit OS? –

Répondre

3

OS 32 bits signifie 2 Go Espace d'adressage virtuel pour vos processus. L'édition standard OS ne signifie pas non plus d'extensions AWE. Ainsi, votre machine d'essai sera sévèrement privée de RAM par rapport à celle de production.Votre pool de mémoire tampon souffrira d'une expulsion prématurée des pages, vos plans d'exécution n'auront pas la possibilité de choisir des jointures de hachage pour beaucoup de requêtes et ainsi de suite. Je doute que cela explique toute la différence, je suis sûr qu'il doit y avoir quelque chose de plus en jeu. Vous dites seulement 10 utilisation du processeur au cours de la requête, votre paramètre MAXDOP 1 par hasard sur le serveur de test? Avez-vous comparé la sortie de sp_configure sur les deux machines? (assurez-vous d'activer également les "options avancées"). Pouvez-vous exécuter le même problème sur les deux machines, à partir d'une fenêtre de requête SSMS, avec SET STATISTICS IO ON et SET STATISTICS TIME ON? Exécutez-le 2-3 fois sur chacun et notez les résultats. Montre-t-il le même nombre de lectures logiques mais un nombre très différent de lectures physiques? Cela indiquerait que la RAM est insuffisante pour mettre en cache les pages nécessaires. Le nombre de lectures logiques est-il très différent? Cela signifie probablement que vous obtenez un mauvais plan d'exécution lors du test.

La requête est-elle intensive en écriture par hasard? Si oui, avez-vous pré-développé la base de données de test ou votre exécution est-elle bloquée par la croissance du journal et les événements de croissance de la base de données?

Il y a beaucoup d'endroits à regarder pour mieux cerner le problème, comme les compteurs de performance SQL, sys.dm_os_wait_stats, vérifiez la sys.dm_exec_requestswait_type et wait_resource.

+0

Je parie que c'est tout. La table mise à jour par le proc est longue de 5.000.000 lignes. Je pense que c'est la privation de mémoire comme vous le suggérez. Merci beaucoup. – rc1

+0

MAXDOP est zéro sur les deux boîtes d'ailleurs. – rc1

+0

Je voudrais aplatir la boîte de test et réinstaller 64 bits OS et SQL, peu importe le résultat que vous trouvez. 32 bits est une impasse. Vous réglerez votre application pour des problèmes qui n'existent tout simplement pas en production. –

0

Vous avez un plan différent généré ou certaines différences matérielles. Pour le matériel, vous pouvez vérifier le disque secondes/[lire, écrire] (éditer pour clarifier - vous le faites dans perfmon) et voir si vous avez des différences massives de la mise en cache (par exemple contrôleur de perf raid haute).

Pour la différence de plan, consultez simplement les plans d'exécution. Vous pouvez également définir les statistiques io sur et voir si vous obtenez des lectures physiques au lieu de lectures logiques. Peut-être que la différence de mem empêche votre jeu de données de s'installer en mémoire dans une machine secondaire mais pas primaire.

+0

J'ai vérifié le plan d'exécution pour le proc on test, et il n'a pas sauté comme ayant des scans de table ou quelque chose comme ça. Dans l'ensemble, la chose a juste pris trop de temps. Je me demande si c'est de la mémoire comme vous le suggérez. – rc1

0

était les données dans le cache mémoire encore? ou a-t-il été lu à partir du disque

+0

Aussi quelle est l'utilisation de la mémoire du serveur 8 Go ... si SQL l'utilise tous alors que cela pourrait être votre réponse, il est en cache plus de données. – jvanderh

+0

Le gestionnaire de tâches sur le serveur de test (4 Go de RAM) affiche «PF Usage 2.01GB» avec SQL Server en cours d'exécution. Sur le serveur primaire (8GB RAM) il montre "PF Usage 6.67GB". Comment est-ce que je ferais que SQL Server sur la boîte de test utilise plus de RAM? Peut-être que cela ferait une différence. – rc1

+0

sur une nouvelle installation, serveur de base de données nouvellement démarré, il n'aurait pas beaucoup de quelque chose dans le cache pour le moment. lancez-le plusieurs fois sur la machine d'essai et voyez si cela devient plus rapide. aussi, s'il y a moins de mémoire pour le cache, alors vous lirez plus sur le disque, ce qui est lent. –

0

Bien que vous ne puissiez pas utiliser AWE sur votre serveur 32 bits, vous pouvez fournir un peu plus de mémoire à SQL Server en ajoutant le commutateur/3GB au fichier boot.ini. Consultez la documentation en ligne, il devrait vous donner plus d'informations.

Questions connexes