web-dev-qa-db-fra.com

Pourquoi SQL Server consomme-t-il plus de mémoire serveur?

SQL Server consomme 87,5% de la RAM de mon serveur. Cela a récemment provoqué de nombreux goulots d'étranglement des performances tels que la lenteur. J'ai fait des recherches sur ce problème. Une solution courante que je pourrais trouver sur Internet est de définir la limite maximale pour SQL Server. Cela a été fait et de nombreuses améliorations ont été obtenues. Je veux savoir pourquoi si la valeur de mémoire maximale n'est pas définie, pourquoi SQL Server continue de consommer les ressources

37
kombo

SQL Server consommera autant de mémoire que vous le lui permettez . Par défaut, ce nombre engloberait 100% de votre mémoire numérique sur votre machine. C'est pourquoi vous voyez ce que vous voyez. Si vous donnez à SQL Server 24 Go de mémoire, SQL Server fera de son mieux pour utiliser 24 Go de mémoire. Ensuite, vous avez SQL Server et le système d'exploitation en lutte pour les ressources, et cela entraînera toujours de mauvaises performances.

Lorsque vous définissez le max server memory limite de configuration, vous limitez le montant que SQL Server peut allouer au pool de mémoire tampon (pratiquement où il stocke les pages de données et le cache de procédure). Il y a d'autres commis de mémoire dans SQL Server, donc pour votre version particulière (2008 R2 et ci-dessous), max server memory contrôle simplement le pool de tampons. Mais ce sera toujours le plus gros consommateur de mémoire.

Référence TechNet sur les effets de la mémoire minimale et maximale du serveur

Les options de configuration de la mémoire serveur minimale et de la mémoire serveur maximale établissent des limites supérieure et inférieure à la quantité de mémoire utilisée par le pool de mémoire tampon du moteur de base de données Microsoft SQL Server.

En ce qui concerne la question combien de mémoire dois-je laisser pour le système d'exploitation, c'est une mesure couramment débattue. Tout dépend vraiment, principalement de quels autres processus sont en cours d'exécution sur le serveur. À condition que ce soit un serveur vraiment dédié (et ce n'est presque jamais le cas). J'aime voir au moins 4 Go de mémoire pour l'OS (et encore plus sur les gros boîtiers matériels). Mais surtout, surveillez la quantité de mémoire inutilisée. Soyez libéral et donnez plus de mémoire à SQL Server si vous remarquez beaucoup de mémoire disponible (peut être surveillée via perfmon) et inutilisée (bien sûr, en laissant toujours un petit tampon pour ces situations de coin).

49
Thomas Stringer

SQL Server est conçu pour utiliser toute la mémoire du serveur par défaut. La raison en est que SQL Server met en cache les données de la base de données dans RAM afin qu'il puisse accéder aux données plus rapidement qu'il ne le pouvait s'il avait besoin de lire les données du disque à chaque fois qu'un utilisateur Si nous devions aller sur les disques chaque fois que SQL Server avait besoin des mêmes données encore et encore sur le disque IO les exigences seraient incroyablement élevées.

Normalement, je recommande aux gens de laisser environ 4 Go de RAM pour Windows, mais cela dépend vraiment de la quantité de logiciels exécutés sur le serveur, des composants de SQL Server que vous utilisez (tous les composants ne suivent pas ce réglage), etc.

11
mrdenny

Cela fonctionne instantanément sans avoir besoin de redémarrer SQL:

Options de configuration du serveur de mémoire du serveur

Utilisez les deux options de mémoire du serveur, mémoire minimale du serveur et mémoire maximale du serveur , pour reconfigurer la quantité de mémoire (en mégaoctets) gérée par le gestionnaire de mémoire SQL Server pour une instance de SQL Server. Par défaut, SQL Server peut modifier ses besoins en mémoire de manière dynamique en fonction des ressources système disponibles.

Procédure de configuration d'une quantité fixe de mémoire Pour définir une quantité fixe de mémoire:

  1. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.
  2. Cliquez sur le nœud Mémoire.
  3. Sous Options de mémoire du serveur, entrez la quantité souhaitée pour la mémoire serveur minimale et la mémoire serveur maximale.

Utilisez les paramètres par défaut pour permettre à SQL Server de modifier dynamiquement ses besoins en mémoire en fonction des ressources système disponibles. Le paramètre par défaut pour la mémoire minimale du serveur est 0 et le paramètre par défaut pour la mémoire maximale du serveur est 2147483647 mégaoctets (Mo).

J'espère que ça aide!

6
Nikita Kosousov

Comme Eric l'a dit, vous devez gérer la mémoire afin de conserver de l'espace libre pour d'autres processus. Pour une explication générale et quelques conseils sur la façon de définir la mémoire maximale, consultez le post de Jonathan Kehayias:

http://www.sqlskills.com/blogs/jonathan/how-much-memory-does-my-sql-server-actually-need/

Vous pouvez modifier la recommandation en tenant compte de l'utilisation de votre serveur.

3
RLF

SQL Server utilisera RAM sauf si vous limitez l'utilisation. En règle générale, j'essaie de laisser au moins 2 Go d'espace libre pour le système d'exploitation, c'est-à-dire si vous avez 64 Go physiques RAM dans l'hôte, limitez SQL Server à 62 Go.

http://msdn.Microsoft.com/en-us/library/ms191144 (v = sql.105) .aspx

1
Eric Higgins