Management Studio System.OutOfMemoryException


38

J'utilise Microsoft SQL Server 2012 et j'essaie d'exécuter une requête simple dans Management Studio. Je reçois l'erreur suivante (dans SSMS, en cours d'exécution sur le serveur):

Une erreur s'est produite lors de l'exécution du lot. Le message d'erreur est le suivant: Une exception de type 'System.OutOfMemoryException' a été levée.

24 Go de RAM sont installés sur le système, mais dans le gestionnaire de tâches, le processus sqlservr.exe n’utilise que 2,9 Go.

Existe-t-il un paramètre qui limite l’utilisation de la RAM?

Réponses:


39

Cette erreur indique que Management Studio manque de mémoire, pas du service SQL Server. Même si vous avez installé SQL Server 64 bits, l'exécutable SQL Server Management Studio est une application 32 bits.

Cela est probablement dû à la taille du jeu de résultats que vous renvoyez à Management Studio. Exécutez-vous quelque chose comme SELECT * FROM really_big_table? Voir http://support.microsoft.com/kb/2874903 pour plus d'informations.


19

Mike a raison de dire que le message d'erreur que vous recevez provient de l'application Management Studio elle-même et non de SQL Server. C’est la mémoire de votre poste de travail local qui a été épuisée, probablement en raison de la tentative d’extraire 16 milliards de lignes dans l’application cliente (restituer une telle quantité de données dans une grille est assez coûteux en termes de mémoire, essayez donc de limiter vos requêtes en utilisant TOPetc. - Je ne sais pas quelle (s) chose (s) pratique (s) vous pourriez éventuellement faire avec suffisamment de données pour utiliser de toute façon toute votre mémoire locale).

Mais je souhaite aborder un autre problème: utiliser le Gestionnaire des tâches pour évaluer la quantité de mémoire utilisée par SQL Server. Ne fais pas ça c'est un menteur hardi. Copie de cette réponse (votre question est double, je ne peux donc pas la fermer en double):


Vous ne pouvez JAMAIS, JAMAIS, faire confiance au Gestionnaire des tâches pour vous dire la quantité de mémoire utilisée par SQL Server. Arrêtez d'utiliser le Gestionnaire des tâches pour cette période. Utilisez le compteur de performance - vous pouvez également interroger le compteur de performance à l'aide de DMV:

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

Vous pouvez enregistrer cela sous forme de raccourci de requête dans Outils> Options> Environnement> Clavier> Raccourcis de requête et obtenir des résultats précis dans une fenêtre de requête beaucoup plus rapidement que des résultats inexacts obtenus du Gestionnaire des tâches.

Vous pouvez également vérifier la pression de la mémoire (et savoir si vous pouvez y remédier) à l'aide de ces requêtes:

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

Les commandes ci-dessus concernent les nouvelles versions de SQL. Pour les serveurs SQL 2008 R2, les commandes sont légèrement différentes. Ill ajouter un autre post à ce bas pour ces serveurs car les commentaires de suivi ne sont pas assez formatés pour être mis ici
David Bridge

15

C'était le même cas avec moi. Mon SQL Server Management Studio était ouvert depuis quelques jours. Je l'ai redémarré et le problème a été résolu.


9

J'ai trouvé que désactiver IntelliSense était utile. Je vous recommande également de vérifier vos compléments (des outils tels que les outils RedGate et ApexSQL ont également exacerbé le problème pour moi).

Ce problème me tourmente depuis des jours et pour tout dire, il est assez faible de Microsoft. Ils devraient vraiment avoir des jeux d’outils 64 bits, car nous traitons actuellement du Big Data, des serveurs 64 bits et des environnements de bureau.


1
Dans mon cas, RedGate SQL Prompt se battait avec SSMS intégré dans intellisense. La désactivation de SSMS intellisense a également rendu l’Invite SQL beaucoup plus efficace.
TTT

1

Pour SQL 2008 R2, les commandes de requête en mémoire (de l'article d'Aaron Bertrand) sont les suivantes:

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

Notez également que la commande

EXEC sp_configure 'max server memory';

peut ne pas fonctionner sauf si vous avez activé les options avancées. par exemple faire ceci en premier

EXEC sp_configure 'show advanced options',1
RECONFIGURE

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.