Le redémarrage de SQL Server accélère-t-il?

22

J'ai remarqué que certains administrateurs de base de données redémarrent SQL Server très fréquemment, parfois même la nuit. Je pense qu'ils le font pour libérer de la mémoire, ou peut-être aussi pour accélérer les requêtes. Je sais qu'après un redémarrage, les plans de requête doivent être recompilés, mais même en incluant cela, je me demande s'il y a un avantage net à cette pratique.

Est-il vrai que le redémarrage quotidien de SQL Server accélère son exécution?

Nick Chammas
la source

Réponses:

37

Le redémarrage du serveur est probablement l'une des choses les plus dommageables pour les performances. Cela signifie que vous forcez un cache froid pour les données, un cache froid pour les plans de requête et tous les caches internes SQL Server sont également supprimés dans le processus. Sans oublier qu'en jetant toutes les statistiques collectées dans les statistiques de fonctionnement DMV, vous diminuez vos chances de réussir à enquêter sur quelque chose.

Il n'y a aucune orientation officielle soutenant cette pratique, je ne l'ai jamais vue mentionnée dans aucun travail de bonne pratique réputé, je n'ai jamais entendu parler d'un expert réputé mentionnant cela comme une pratique. Ne le fais pas.

Remus Rusanu
la source
Je ne suis pas d'accord. SQL Server est hébergé sur un serveur Windows où les correctifs de sécurité et les mises à niveau MS nécessitent des redémarrages périodiques. Je crois qu'une meilleure conception SQL est la clé pour résoudre les problèmes de performances et ne pas compter sur les redémarrages du serveur, mais c'est parfois une étape nécessaire.
Fandango68
27

Bien que les autres réponses soient bonnes, il leur manque un élément important: le cache de fichiers de Windows.

Sur Windows 64 bits, il n'y a pas de limite à la quantité de mémoire que Windows utilisera pour mettre en cache les fichiers. Windows peut vider complètement votre système de mémoire, et à ce stade, vous commencerez à échanger sur le disque. Il a été documenté à quelques endroits:

En redémarrant SQL Server, vous forcez SQL à abandonner la mémoire, laissant ainsi Windows obtenir plus, et la pagination s'arrête temporairement. SQL redémarrera à une utilisation de la mémoire proche de zéro et augmentera progressivement, et lorsque la boîte manquera de mémoire, le redémarrage aidera temporairement. En redémarrant l'intégralité du système d'exploitation, vous forcerez également l'utilisation du cache de fichiers de Windows.

La vraie solution: arrêtez de copier des fichiers à partir du serveur Windows ou limitez la quantité de cache de fichiers utilisée avec le service de cache de fichiers dynamique, comme indiqué dans les articles de blog ci-dessus.

Brent Ozar
la source
3
+1 Était conscient du problème, ne savait pas que le cache pouvait être limité à l'aide du service de cache dynamique.
Mark Storey-Smith,
La pratique consistant à "épingler" la mémoire sur un MIN et un MAX (bien qu'ils devraient et pourraient être exactement la même quantité de Ko) aiderait-elle à garantir que SQL Server ne consomme qu'une quantité prédéfinie de RAM MIN / MAX permettant à d'autres services / applications Windows / les demandes de réseautage pour continuer à fonctionner. Cela a été ma pratique et a bien fonctionné. D'autres réflexions?
SnapJag
@SnapJag - pas nécessairement, car SQL ne consomme pas immédiatement la quantité minimale. SQL démarre à zéro et augmente progressivement en fonction des besoins.
Brent Ozar
11

S'il accélère les requêtes, un reniflage de paramètres peut être impliqué. Si un plan de merde est mis en cache et appliqué à des appels ultérieurs inappropriés, le miracle du redémarrage permet au plan commun / correct d'être mis en cache. Si tel est le cas, il existe des moyens infiniment meilleurs de corriger le comportement comme d'autres l'ont indiqué. Mais jusqu'à ce qu'ils arrêtent de redémarrer la boîte, il n'y a aucun moyen d'effectuer une analyse des causes profondes.

billinkc
la source
Cela aurait dû être la réponse acceptée. Une conception SQL et une conception de plan appropriées sont essentielles pour éviter la nécessité d'un redémarrage du serveur, mais les redémarrages du serveur peuvent être nécessaires de toute façon en raison des politiques du serveur - telles que les correctifs de sécurité, etc.
Fandango68
11

Vous ne devez pas redémarrer SQL Server sauf si vous avez modifié les propriétés du service ou défini des traces de démarrage que vous souhaitez appliquer immédiatement.

Comme @RemusRusanu a déclaré de nombreux points, il efface beaucoup de caches et oblige SQL Server à faire beaucoup de travail de démarrage inutile .

Il semble que ce serveur ne soit pas un serveur SQL Server / base de données dédié. Il est préférable qu'un serveur de base de données de production n'ait qu'un seul but ... être un serveur de base de données. Dans ce cas, vous devez mettre de côté suffisamment de mémoire et de ressources pour le système d'exploitation et donner tout le reste à SQL Server. Cela vous amènerait à ne pas affamer d'autres applications ou rôles de serveur.

Thomas Stringer
la source
2

Je suis d'accord avec le sentiment que si vous faites tout correctement, vous n'aurez peut-être pas besoin de redémarrer / redémarrer votre serveur MSSQL.
Pour moi, cela s'applique au scénario où tout le monde est compétent et où vous pouvez tout réparer.

Je ne suis pas DBA. Je suis un architecte logiciel et une partie de cela implique de construire des schémas de base de données entiers à partir de zéro et, malheureusement , de travailler avec des bases de données tierces sur lesquelles je n'ai absolument aucun contrôle.
Les gens, qui ont créé et maintiennent l'une de nos principales bases de données tierces, l'ont à peine rendue fonctionnelle.

Ai-je mentionné que je ne suis pas non plus un expert en sécurité ou un ingénieur réseau?

  • Au moins une mise à jour du système d'exploitation Windows majeure, une mise à jour de sécurité, une mise à jour du BIOS, un Service Pack OS / MSSQL ou une mise à jour cumulative MSSQL sont censées sortir tous les mois ou tous les deux mois.
  • Les appliquer en temps opportun signifie redémarrer / redémarrer votre serveur tous les trimestres.
  • Même lorsque vous travaillez à l'intérieur d'un intranet, pourquoi n'appliqueriez-vous pas les mises à jour de sécurité?
  • Si j'étais autorisé à avoir SSL sur nos sites intranet PHI, je le ferais car aucun réseau n'est infaillible. Je suis paranoïaque je suppose.


Pour moi, la question devient alors: Dois-je redémarrer SQL Server plus souvent que tous les 3 mois?

Planifier des redémarrages pour la promesse d'un pouce supplémentaire de performance, c'est comme danser pour la pluie.
Peut-être que ça viendra, peut-être que ça ne viendra pas, mais vous ne saurez pas avec certitude ce qui a causé la pluie.

  • Si vous constatez une augmentation significative des performances après le redémarrage du serveur en raison d'une maintenance régulière, vous devez rechercher pourquoi cela se produit.
  • Si vous rencontrez des problèmes et n'êtes pas sûr de la cause de ces problèmes, alors que vous réduisez vos variables en arrêtant les services et les travaux pour trouver quelque chose comme une fuite de mémoire (dans des cas extrêmes comme celui-ci), vous pouvez redémarrer / redémarrer votre serveur avec certains services activés off (ou traces activées) vous aidera à exclure ces autres services comme cause.

Je ne aime pas dire que vous jamais besoin de redémarrer pour résoudre un problème ou vérifier le basculement, mais je n'ai un problème avec redémarrages de planification pour garder un problème de performance inconnue de se produire au hasard.

La seule exception à cette règle est que si vous gérez une base de données tierce non fiable, où le redémarrer toutes les semaines ou deux semble être le seul moyen de la faire fonctionner et vous n'êtes pas autorisé à la réparer ou même à la toucher.
Même alors, vous devez rechercher des correctifs, les partager avec le propriétaire et déclencher l'enfer jusqu'à ce qu'il soit résolu.

MikeTeeVee
la source