DB Engine Stolen Server 内存太高

Dar*_*lic 9 sql-server memory sql-server-2012

我从 System Center Operations Manager (SCOM) 收到错误消息。

如何解决这个错误?

SQL DB 2012 Engine Stolen Server Memory 过高。

我运行查询并得到这个计数器:

???????????????????????????????????????????????
? 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    ?
???????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

Sha*_*nky 12

你看到多少次这样的消息?如果是一次或两次,则可以忽略。

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

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

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

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