数据库引擎被盗的服务器内存过高


8

我从系统中心运营经理(SCOM)得到错误。

如何解决这个错误?

SQL DB 2012引擎被盗服务器内存太高。

我运行查询并获得以下计数器:

╔═══════════════════════════════╦═════════════╗
║ 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    ║
╚═══════════════════════════════╩═════════════╝

Answers:


10

您看到多少次此类消息?如果是一两次,则可以忽略。

较早的支持文章如何使用DBCC MEMORYSTATUS中所述,“内存被盗” 是:

被盗内存描述了用于排序或哈希操作(查询工作区内存)的缓冲区,或用于用作通用内存存储以分配存储内部数据结构(如锁,事务上下文和连接信息)的缓冲区。不允许Lazywriter进程将Stolen缓冲区刷新出缓冲池。

通常从缓冲池中获取内存。如果您运行DBCC MEMORYSTATUS并且输出显示高的Stolen Pages,则意味着某些进程正在从缓冲池中窃取更多的内存而不是必需的,而您需要找到该进程。

很可能有一些正在运行的操作执行了巨大的排序操作,同时SQL Server大量消耗内存,从而导致出现此消息。除非您遇到一些OOM问题,否则将更将此消息视为警告


-1

我们正面临类似的问题(被盗的内存约占总内存的50%),因此从Google搜索中看到了此信息,但我们无法

顺便说一句,我发现下面的代码

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

我进行了更多修改,以将“被盗的百分比”显示为总内存

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)')
        )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.