J'ai eu des erreurs de MOO SQL Server périodiques, une fois au point que SQL Server s'est arrêté et s'est toujours produit pendant la nuit, lorsque personne ne l'utilise, et aucun travail de l'Agent SQL en cours d'exécution à ce moment-là:
Voici l'erreur typique:
17/08/2017 19: 31: 17, spid100, Inconnu, La mémoire système est insuffisante dans le pool de ressources «interne» pour exécuter cette requête.
17/08/2017 19: 31: 17, spid100, inconnu, erreur: 701 Gravité: 17 État: 123.
17/08/2017 19: 31: 17, spid112, inconnu, erreur: 18056 Gravité: 20 État: 29. (Paramètres :). L'erreur est imprimée en mode laconique car une erreur s'est produite lors du formatage. Le suivi des notifications ETW, etc. est ignoré.
Voici les informations du serveur:
- 10 Go de mémoire MIN SQL Server
- 21 Go de mémoire SQL MAX Server
- seulement 4 DB sur le serveur
- leurs tailles ne sont que de 1 à 2 Go chacune
- La taille de Tempdb n'a jamais dépassé 1 Go (définie sur une croissance automatique de 10 Go)
- Les index sont tous à faible fragmentation, les statistiques sont mises à jour
Version:
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
J'ai vérifié plusieurs éléments:
- DBCC memorystatus
Statistiques rapides:
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM sys.dm_os_process_memory; GO Output: 20 GB Page Life Expectancy 155932
Aucun gouverneur de ressources activé:
select pool_id, cache_memory_kb, used_memory_kb, out_of_memory_count,used_memgrant_kb from sys.dm_resource_governor_resource_pools Output: pool_id | cache_memory_kb | used_memory_kb | out_of_memory_count | used_memgrant_kb --------+-----------------+----------------+---------------------+----------------- 1 | 295368 | 641416 | 0 | 0 select (physical_memory_in_use_kb/1024) Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb/1024) Locked_pages_used_Sqlserver_MB, (total_virtual_address_space_kb/1024 )Total_VAS_in_MB, process_physical_memory_low, process_virtual_memory_low from sys. dm_os_process_memory Output: Memory_usedby_Sqlserver_MB | Locked_pages_used_Sqlserver_MB | Total_VAS_in_MB | process_physical_memory_low | process_virtual_memory_low ---------------------------------------------------------------------------------------------------------------------------------------- 20553 | 20393 | 134217727 | 0 | 0
Le serveur est sur SP3, je sais qu'il y avait un problème de fuite de mémoire dans SP1, donc l'exclure.
Quelqu'un remarque-t-il quelque chose dans le résultat DBCC sur lequel je devrais me concentrer?
la source
Réponses:
Étant donné que SQL Server s'exécute sur une machine virtuelle, comme l'indique l'
(hypervisor)
indicateur dans l'instruction de version, vous devez vous assurer qu'il dispose d'une réservation de mémoire dans VMWare (ou Hyper-V, etc.) sur le serveur hôte.La réservation de mémoire doit généralement représenter 100% de la mémoire allouée à la machine virtuelle pour les machines virtuelles SQL Server utilisées dans un environnement de production. Sans réservation de mémoire, le serveur hôte peut "voler" la mémoire de la machine virtuelle via l'utilisation d'un "pilote de ballon" à utiliser par une autre machine virtuelle, ce qui est probablement la cause de votre état de mémoire insuffisante.
Dans VMWare vCenter, pour définir la réservation de mémoire sur une machine virtuelle:
Mettez la machine virtuelle hors tension avant de configurer les paramètres de mémoire.
Dans vSphere Client, cliquez avec le bouton droit sur une machine virtuelle dans l'inventaire et sélectionnez Modifier les paramètres.
Dans la fenêtre Propriétés de la machine virtuelle, sélectionnez l'onglet Ressources et sélectionnez Mémoire.
Dans le panneau Allocation des ressources, activez la case à cocher Réserver toute la mémoire invité (Tous verrouillés).
Cliquez sur OK.
Si vous utilisez Microsoft Hyper-V, désactivez la mémoire dynamique pour la machine virtuelle, en utilisant ce processus dans Hyper-V Manager:
la source
Quelques changements de configuration que je ferais:
Vous pouvez utiliser le script suivant pour accomplir cela:
la source