Je me demande si le redémarrage d'un serveur dans un calendrier serait une bonne idée pour les performances.
Disons que nous voulons redémarrer le serveur à 02h00 pour 2 nuits.
Le serveur est ici Windows Server 2008 R2
. Principalement, SQL Server et IIS 7.5 (près de 15 applications en cours d'exécution) s'exécutent sous ce serveur. Le serveur a 4 Go de mémoire.
Réponses:
Bien que je convienne qu'il n'y a rien de mal à redémarrer la boîte, en soi, sur la base de votre commentaire selon lequel l'Agent SQL Server s'arrête, je conseillerais une analyse supplémentaire des causes profondes. Les services ne s'arrêtent généralement pas simplement, et les services de l'Agent SQL Server n'ont généralement pas agi de cette façon dans mon expérience.
Je pense que vous feriez bien, à part le redémarrage, d'examiner les journaux des événements et d'exécuter un journal de compteur de performances à long terme que vous pouvez analyser avec Performance Analysis of Logs (PAL) pour voir s'il "voit" quelque chose de mal. Vous devez essayer, si rien d'autre, de corréler les événements associés à l'arrêt de l'Agent SQL avec d'autres facteurs.
la source
Si vous cherchez à redémarrer l'ordinateur pour améliorer les performances, cela signifie probablement que vous rencontrez éventuellement des problèmes de gestion de la mémoire.
La mise en cache est bonne
Si quoi que ce soit, le redémarrage des serveurs nuirait aux performances (et à la disponibilité bien sûr) dans un environnement plus idéal . L'un des principes fondamentaux des performances en informatique est de tirer parti de la mise en cache (disposer de données disponibles en mémoire rapide). Chaque fois que vous redémarrez, vous videz votre cache. Cela est vrai à la fois pour SQL Server et IIS. Bien que vous n'ayez peut-être pas l'environnement idéal, les éléments suivants devraient vous guider vers une meilleure option que de redémarrer le serveur selon un calendrier.
Fuites de mémoire IIS?
Vous venez de mentionner qu'il s'agit d'IIS 7.5. Bien que je trouve cela déprimant, tant d'applications Web qui s'exécutent sur IIS 7.5 ont des fuites de mémoire que les valeurs par défaut dans IIS sont de redémarrer l'APP toutes les X minutes et de l'arrêter si un pool APP est inactif. L'idéal est de corriger les fuites de mémoire - mais si vous ne le pouvez pas, vous pouvez ajuster ces paramètres, notamment les limites de mémoire et les minuteries. Vous pouvez utiliser perfmon pour déterminer quel processus w3wp utilise la mémoire. C'est un peu pénible, mais vous pouvez le rattacher au pool d'applications
%systemroot%\system32\inetsrv\APPCMD list wps
.Mémoire SQL
Pour en revenir à la mise en cache, SQL prendra la mémoire qu'il peut. Vous pouvez limiter cela dans les propriétés de SQL Server. Si vous ne limitez pas la mémoire et que vous exécutez également IIS sur la boîte, ceux-ci peuvent commencer à se battre pour des performances de destruction de mémoire. Cet excellent article va dans le détail: Un guide Sysadmin pour la mémoire Microsoft SQL .
Équilibre
Comme vous avez à la fois IIS et SQL sur la même boîte, vous devrez équilibrer leur utilisation de la mémoire. Si vous ne le faites pas, vous obtiendrez peut-être de la mémoire qui sera probablement utilisée à nouveau échangée sur le disque - ce qui est un endroit horrible (il devrait y avoir des compteurs perfmon pour l'activité d'échange). En utilisant les paramètres de recyclage IIS et les limites de mémoire SQL, vous devriez pouvoir rendre ce système stable. Pour équilibrer cela, vous pourriez avoir besoin de plus de mémoire que 4 Go. De plus, si c'est une option, je recommanderais fortement de placer SQL Server sur une machine dédiée - cela améliorera considérablement les performances et simplifiera considérablement les choses.
la source
Je ne suis pas partisan de redémarrer les serveurs selon un calendrier, surtout pas comme moyen de résoudre un problème sous-jacent. Si vous devez redémarrer ce serveur pour résoudre un problème de performances, la meilleure solution consiste à rechercher la cause du problème et à le résoudre. Le redémarrage régulier du serveur ne fait qu'obscurcir le problème sous-jacent.
la source
Si vous avez des fuites de mémoire importantes, alors pourquoi pas - sinon redémarrez mensuellement avec des mises à jour.
la source
Si vous voulez vraiment redémarrer le serveur selon un calendrier (en raison des fuites de mémoire ou des mises à jour mentionnées ci-dessus ou pour toute autre raison) - pourquoi ne pas envisager une solution de cluster? Installez un autre serveur en parallèle, connectez-le à un équilibreur de charge (même un simple ferait l'affaire) et vous pouvez le redémarrer autant que vous le souhaitez sans perdre la disponibilité du service ou en vous inquiétant que le serveur ne démarre pas du tout et vous serez absent.
la source
Ce n'est pas une idée horrible , mais si c'est juste du «vaudou», cela ne vous aidera probablement pas beaucoup.
Cependant, il y a deux raisons de ne pas laisser cela être la fin de votre enquête pour améliorer vos performances.
L'une est l'évolutivité future. Si vos pannes sont le résultat de la charge, d'un certain nombre de requêtes, d'une requête particulière qui rencontre un bogue de mise en cache, de compilation de requêtes ou d'indexation de btree, ou d'autres problèmes qui se reproduisent actuellement quotidiennement, ils se produiront probablement plus fréquemment en tant que charge augmente avec le temps. Etouffez ça dans l'œuf.
L'autre problème est que je pense que vous devrez interrompre les demandes entrantes des services dépendants lors de votre redémarrage. Vous venez de créer une cadence opérationnelle. Chaque fois qu'une tâche quotidienne doit être exécutée, elle sera liée à votre redémarrage. À un moment donné, vous aurez ces redémarrages massifs qui prennent six heures (je n'exagère pas ici, je l'ai vu se produire dans plus d'une entreprise) et personne ne se souviendra pourquoi tout doit être arrêté et redémarré au milieu de la nuit.
Ma recommandation serait de surveiller le processus SQL et de redémarrer au besoin. Comme mentionné par une affiche précédente, SQL n'a pas la fuite de mémoire que les gens pensent (et je dis cela en tant que personne qui faisait partie de l'équipe MSSQL au milieu des années 90). Vous souhaitez que votre serveur de base de données utilise presque 100% de mémoire et de CPU. Rien de moins gaspille des ressources.
la source
Si vous avez du code mal écrit et des fuites de mémoire, le redémarrage peut être le seul moyen de renvoyer la mémoire allouée au pool. Si vous avez des processus liés à la mémoire, cette actualisation du pool à un état propre peut certainement améliorer les performances ... pendant un certain temps. Mais c'est vraiment une mauvaise façon de gérer les problèmes de performances, la cause réelle doit être résolue et corrigée.
Sinon, laissez-le s'exécuter jusqu'à ce que vous ayez besoin d'une fenêtre de maintenance pour appliquer les correctifs / applications / restaurer les données. C'est peut-être le bon moment pour suggérer à un ingénieur de la performance d'examiner les serveurs en question pour savoir exactement pourquoi / quels problèmes sont à l'origine de cela.
la source
Bien que ce ne soit pas une réponse complète en soi , mais est-ce une option viable pour ajouter un peu plus de RAM au serveur? 4 Go est un peu bas pour une machine IIS / SQL Server. Selon qu'il s'agit d'une unité de serveur dédiée ou d'un bureau mis en service, vous pourrez peut-être obtenir 8 Go ou plus pour un coût assez faible. Certes, s'il s'agit d'un serveur, cela pourrait coûter un peu plus cher que la RAM de bureau standard, mais cela vous donnerait un peu plus de temps entre les redémarrages forcés.
Cela dit, voyez si vous pouvez limiter SQL Server à utiliser au maximum 80% de la RAM, ou consultez les journaux pour déterminer exactement ce qui ne va pas et / ou pourquoi le service s'arrête.
la source
Sans rapport avec le problème SQL auquel vous pouvez être confronté si vous avez des serveurs Windows et que vous suivez une sorte de routine de correction, vous redémarrerez régulièrement les serveurs sans avoir à redémarrer "juste parce que". Lorsque je travaillais pour "BIG MULTINATIONAL", nous avons été mandatés pour effectuer des correctifs mensuels et, à ce titre, tous nos serveurs ont été redémarrés tous les mois au moins une fois.
la source
Je fais cela sur 3 serveurs, 1 est notre et 2 clients. Je l'ai installé pour diverses raisons - un serveur 2008R1 a de nombreuses mises à jour en attente d'installation, mais je ne peux pas les installer par lots, donc je l'installe une par une chaque jour; un autre serveur 2012R2 - pour le dépannage de démarrage et certains problèmes de performances, etc. Je ne pense pas que ce soit une mauvaise pratique de planifier un redémarrage périodique, de l'autre disque. .
la source
Je connais une grande entreprise qui non seulement redémarre ses serveurs Windows tous les soirs, mais certains d'entre eux sont même réinstallés toutes les 24 heures. Pour eux, c'est nécessaire à cause des poireaux de mémoire dans les problèmes de logiciel et de sécurité.
Il semble que certaines entreprises redémarrent toutes les 24 heures - bien que cela me semble étrange en tant qu'administrateur Linux. Pour être clair: je ne recommanderais jamais de le faire en raison d'un problème de mémoire - recherchez le problème et résolvez-le.
Si votre utilisation de la mémoire reste fixe à 75% pendant des mois, il n'est peut-être pas nécessaire de redémarrer - il est tout à fait normal qu'une application serveur utilise toute la mémoire disponible - elle augmente considérablement les performances car vous avez besoin de moins d'E / S de disque si vous utilisez la RAM pour mettre en cache vos données.
la source