La mémoire du serveur volé du moteur DB est trop élevée


8

J'obtiens une erreur de System Center Operations Manager (SCOM).

Comment résoudre cette erreur?

La mémoire du serveur volé du moteur SQL DB 2012 est trop élevée.

J'exécute une requête et j'obtiens ces compteurs:

╔═══════════════════════════════╦═════════════╗
║ Stolen Server Memory (MB)     ║ 7354.773437 ║
║ Lock Memory (MB)              ║ 106.195312  ║
║ Free Memory (MB)              ║ 64.632812   ║
║ Connection Memory (MB)        ║ 24.203125   ║
║ Log Pool Memory (MB)          ║ 14.085937   ║
║ Optimizer Memory (MB)         ║ 2.351562    ║
║ Granted Workspace Memory (MB) ║ 1.296875    ║
║ Cursor memory usage           ║ 0.000000    ║
║ Cursor memory usage           ║ 0.000000    ║
║ Cursor memory usage           ║ 0.000000    ║
╚═══════════════════════════════╩═════════════╝

Réponses:


10

Combien de fois voyez-vous de tels messages? S'il est une ou deux fois, il peut être ignoré.

'Mémoire volée' comme décrit dans cet ancien article de support et Comment utiliser le DBCC MEMORYSTATUS est:

La mémoire volée décrit les tampons qui sont utilisés pour le tri ou pour les opérations de hachage (mémoire de l'espace de travail de requête), ou pour les tampons qui sont utilisés comme magasin de mémoire générique pour les allocations pour stocker les structures de données internes telles que les verrous, le contexte de transaction et les informations de connexion . Le processus lazywriter n'est pas autorisé à vider les tampons volés du pool de tampons.

La mémoire provient généralement de Buffer Pool. Si vous exécutez DBCC MEMORYSTATUSet que la sortie vous indique un nombre élevé de pages volées , cela signifie qu'un processus vole davantage la mémoire du pool de tampons que nécessaire et que vous devez trouver ce processus.

Il est très probable qu'il y ait eu une opération en cours qui a effectué une énorme opération de tri et en même temps, SQL Server consommait beaucoup de mémoire, ce qui a conduit à ce message. À moins que vous ne rencontriez un problème de MOO, ce message sera davantage considéré comme un avertissement .


-1

Vu cela dans la recherche Google car nous sommes confrontés à un problème similaire (la mémoire volée représente environ 50% de la mémoire totale), mais nous ne pouvons pas

Btw, j'ai trouvé ci-dessous le code

select type, name, sum((pages_kb*1024)/8192) as stolen_pages
from sys.dm_os_memory_clerks
where pages_kb > 0
group by type, name
order by stolen_pages desc;

type    name    stolen_pages
MEMORYCLERK_SQLBUFFERPOOL   Default 1710360

Je l'ai modifié davantage pour afficher le% de la mémoire volée en tant que mémoire totale

SELECT Now = GETDATE()
    ,StolenMemory = (
        SELECT cntr_value
        FROM sys.dm_os_performance_counters
        WHERE [counter_name] IN ('Stolen Server Memory (KB)')
        )
    ,StolenMemoryPercent = 100.0 * (
        SELECT cntr_value
        FROM sys.dm_os_performance_counters
        WHERE [counter_name] IN ('Stolen Server Memory (KB)')
        ) / (
        SELECT cntr_value
        FROM sys.dm_os_performance_counters
        WHERE [counter_name] IN ('Total Server Memory (KB)')
        )
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.