J'ai un service en cours d'exécution qui reçoit 50 à 100 requêtes par minute. Et ce ne sont pas des requêtes à coût élevé. Ce service fonctionne depuis environ 3-4 mois sans aucune erreur.
Il y a quelques jours, il a commencé à donner "Il n'y a pas suffisamment de mémoire système dans le pool de ressources" par défaut "pour exécuter cette requête." erreur occasionnelle. Quand j'ai enquêté sur le problème, j'ai vu que sqlservr.exe
utilisait ~ 1,5 Go de RAM et% 25 de CPU (tous 1/4CPU). Et quand j'ai redémarré le sqlservr.exe
le bélier commence à ~ 50 Mo et augmente lentement jusqu'à ce qu'il atteigne ~ 1,5 Go, puis conduit à des plantages dans les applications qui l'utilisent.
Après avoir fait un peu de recherche, j'ai pensé que cela était dû à l'édition du serveur SQL que j'utilise. C'était une édition express limitant les nombres à ceux-là. J'ai donc mis à niveau mon serveur SQL de '2008r2 express' à '2012 enterprise'. Lorsque j'ai démarré le service, je pensais que mes problèmes étaient enfin terminés, car le service n'utilise que ~ 60 Mo de mémoire, mais en une heure, malheureusement, le même problème a commencé à se produire, mais cette fois, la mémoire utilisée que je vois sur le gestionnaire de tâches Windows est toujours de ~ 60 Mo, ne dépassant aucune limite.
J'utilise EntityFramework
comme ORM dans un service wcf. Et avec cela, j'ai un système SqlQueryNotification
(courtier et autres) pour certaines opérations de mise en cache.
Suis-je en train de manquer certains points de configuration cruciaux? Ou 6 Go de mémoire et mon processeur 4 n'est vraiment pas suffisant pour cela? Mais ça ne peut pas être ça parce que la même charge était comme ça pendant 3 mois et il n'y avait pas d'erreur à l'époque, et il n'y a pas non plus de changement de code.
SQL Server démarrera avec autant de mémoire que nécessaire, puis augmentera lentement jusqu'à ce qu'il utilise tout ce qui lui est alloué dans les propriétés du serveur:
Il ne libérera aucune de cette mémoire avant le redémarrage du service; c'est par conception.
Il est généralement recommandé de laisser 2 Go pour le système d'exploitation, et vous devez être attentif à tout autre traitement exécuté sur le même serveur que SQL. Il est généralement recommandé d'avoir SQL Server sur son propre serveur sans que rien d'autre n'y soit exécuté.
Cela dit, 1,5 Go de RAM pour SQL Server n'est pas tant que ça. Si vous n'en avez pas plus, il peut être temps d'en ajouter ou de mettre à niveau le serveur.
Voir aussi: Technet , Brent Ozar