Le redémarrage du serveur dans un calendrier serait-il une bonne idée de performances?


14

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.


9
Avez-vous réellement des problèmes de performances? Windows peut durer des années sans être redémarré. Cela ne devrait pas durer aussi longtemps sans redémarrage, simplement parce que les correctifs doivent être installés, mais c'est certainement possible. J'ai personnellement un serveur dans un réseau totalement isolé qui fonctionne depuis <checks> 489 jours. Cela fonctionne toujours bien et les performances sont acceptables.
Ben Pilbrow

6
Je suppose qu'il le fait lorsqu'il y a une quantité limitée de mémoire ou de CPU. - vous supposez à tort.
Rob Moir

4
La personne qui donne un vote négatif à ce poste doit expliquer pourquoi. C'est une question bien expliquée et rien de mal à cela.
tugberk

17
La bonne chose à faire est de résoudre les problèmes que vous rencontrez, pas simplement de le redémarrer. Les ordinateurs qui sont régulièrement redémarrés sont appelés bureaux.
Bart Silverstrim

4
Ils peuvent diminuer le vote parce que certaines questions sont également une mauvaise idée; un exemple ne me vient pas à l'esprit pour le moment. Il y a beaucoup de raisons. Les gens sont étranges. Nous comptons sur le bon sens général pour surmonter les mauvais et les mauvais jugements. C'est pourquoi c'est un site communautaire de questions / réponses.
Bart Silverstrim

Réponses:


32

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.


2
"addt'l" ? Erreur d'analyse à la ligne 2.
Tomas

@tugberk - si telle est la réponse, quelle a été la cause de l'arrêt de l'Agent SQL après votre analyse suggérée par Evan?
Août

@fluffy: Hé là! C'est cool de te voir ici! Je ne sais pas si tu as jamais connu mon "vrai nom". Je suis une vieille connaissance de Song Fight de 2003 à 2005. Pensez à une synth-pop merdique et à un nom de "groupe" qui évoque des visions de dépotoirs et vous vous en souviendrez peut-être.
Evan Anderson

Eh bien, c'est assez hors sujet! Salut Ajusteur. ;) (Bien sûr, cela doit être pris par e-mail, mais je ne trouve pas votre adresse.)
moelleux

38

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.


Incroyable réponse Kyle, j'aurais aimé avoir un de ces mois sur mes questions liées à la performance SBS2011! J'ai touché chacune des choses que vous mentionnez grâce à mes propres (plusieurs mois de recherche). Frappant toujours des problèmes mais c'est une autre affaire.
HaydnWVN

12

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.


5

Si vous avez des fuites de mémoire importantes, alors pourquoi pas - sinon redémarrez mensuellement avec des mises à jour.


Merci pour le conseil. Je regarde le gestionnaire de tâches maintenant et je vois que le système utilise 75% de la mémoire.
tugberk

6
S'il exécute SQL Server, c'est normal. SQL Server essaiera (et vous devez le laisser) utiliser toute la mémoire qu'il peut.
Ben Pilbrow

4
cela ne signifie pas que vous avez des fuites de mémoire. La mémoire est là pour être utilisée. Et le redémarrage pour guérir les fuites de mémoire est une solution de contournement parfaitement pragmatique, mais une meilleure solution à plus long terme consiste à trouver et à réparer le défaut qui les provoque.
Rob Moir

1
@tugberk: Comme je l'ai indiqué dans ma réponse, mon expérience ne montre pas que le service SQL Server Agent s'arrête en raison de conditions de pression mémoire. Vraisemblablement, il y a des conditions dans lesquelles cela se produirait, mais je m'attendrais à ce que vous rencontriez des problèmes avec d'autres services au moment où vous en êtes arrivé à ce point (car ce serait probablement assez grave).
Evan Anderson

2
Si c'était un souvenir, vous devriez voir le swap être durement touché avant qu'il ne "meure", je pense. La mémoire sera toujours utilisée autant que possible pour la mise en cache et autres. Vous devriez probablement utiliser d'abord des outils pour analyser l'utilisation de votre base de données. Et si vous exécutez 15 applications et que vous manquez de mémoire (15 applications + base de données en 4 gig? Quelle est la taille de ces choses?), Vous devriez probablement déjà envisager de casser le composant de base de données du serveur Web vers un serveur dédié.
Bart Silverstrim

2

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.


1

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.


0

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.


0

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.


0

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.


0

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. .


-2

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.


merci @Subito. Eh bien, je suis en fait un développeur Web (pas un administrateur de serveur) mais actuellement, je dois maintenir un serveur. C'est pourquoi je pose ces simples questions. Je pense que tu as raison. Mais je suis choqué que des entreprises fassent ce genre de choses. Ne bénéficient-ils d'aucune sorte d'encaissement côté serveur?
tugberk

Toutes leurs applications sont auto-écrites et destinées à être utilisées avec DOS ou 3.11. Ils ont réussi à obtenir une base de données au-delà de ces applications et les ont en quelque sorte portées sur Server 2008. C'est un miracle que cela fonctionne toujours. Personne n'aurait les noix et essaierait de tout changer pour utiliser des caches. Ils ont quelques personnes qui sont assises là et attendent que quelque chose plante, puis redémarrent l'application / le serveur / quoi que ce soit.
Subito

6
Non, ce n'est pas "légitime" de redémarrer un serveur toutes les 24 heures. Soit ils ont un problème de cas très extrême, soit leur réseau et leurs serveurs sont gérés par les plus grands idiots de la profession.
Rob Moir

oui, ils sont en effet les plus gros idiots - mais ce n'est pas la seule entreprise que je connaisse, qui fait cela avec leurs serveurs Windows ... Cela semble être une façon assez courante de traiter les problèmes de mémoire. - Ne vous méprenez pas, je pense que c'est une terrible, terrible erreur, de ne pas enquêter et résoudre les problèmes!
Subito

7
@Subito - Dans votre réponse, vous dites "Semble légitime de redémarrer toutes les 24 heures" C'est tout simplement un mauvais conseil. Vous dites au PO que c'est une idée légitime tout en référençant une entreprise qui, selon vous, est pleine d'idiots avec un logiciel horrible. Semble pas légitime pour moi.
MDMarra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.