Management Studio System.OutOfMemoryException


38

我正在使用Microsoft SQL Server 2012,并尝试在Management Studio中对其执行简单查询。我收到以下错误(在SSMS中,在服务器上运行):

执行批处理时发生错误。错误消息是:引发类型'System.OutOfMemoryException'的异常。

系统已安装24GB RAM,但在任务管理器中查找sql​​servr.exe进程仅使用2.9GB。

是否存在某个设置会限制其RAM使用率?

Answers:


39

此错误表明Management Studio的内存不足,而不是SQL Server服务的内存不足。即使您安装了64位SQL Server,SQL Server Management Studio可执行文件也是32位应用程序。

这很可能是由您返回Management Studio的结果集的大小引起的。您是否正在执行类似SELECT * FROM real_big_table的操作?有关更多信息,请参见http://support.microsoft.com/kb/2874903


19

Mike说对了,您收到的错误消息是来自Management Studio应用程序本身,而不是SQL Server。这是您本地工作站上的内存已用尽,这很可能是由于尝试向客户端应用程序中拉入160亿行造成的(就网格而言,渲染网格中的大量数据非常昂贵,因此请尝试使用TOPetc 限制查询。-我不知道您可以用足够的数据来做些实际的事情,以至于无论如何都要用完所有本地内存)。

但是我确实想解决另一个问题:使用任务管理器评估SQL Server正在使用的内存量。不要这样 这是一个大胆的骗子。从这个答案中复制(您的问题有两个,所以我无法真正将其作为重复项关闭):


您永远也不会相信任务管理器来告诉您SQL Server正在使用多少内存。在此期间,请停止使用任务管理器。使用性能计数器-您也可以使用DMV查询性能计数器:

SELECT object_name, cntr_value 
  FROM sys.dm_os_performance_counters
  WHERE counter_name = 'Total Server Memory (KB)';

您可以将其另存为“工具”>“选项”>“环境”>“键盘”>“查询快捷方式”中的查询快捷方式,在查询窗口中获得准确结果的速度要比从任务管理器获取不准确的结果快得多。

您还可以使用以下查询检查内存压力(以及是否可以采取任何措施):

SELECT object_name, cntr_value
  FROM sys.dm_os_performance_counters
  WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_kb FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

EXEC sp_configure 'max server memory';

上面的命令适用于新版本的SQL。对于SQL 2008 R2服务器,则命令略有不同。病态在这些服务器的下方添加了另一篇文章,因为后续评论的格式不够好,无法放在此处
David Bridge


9

我发现关闭IntelliSense会有所帮助。我还建议检查您拥有的所有加载项(RedGate工具和ApexSQL之类的东西对于我来说也使问题更加严重)。

这个问题困扰了我好几天,老实说,它对微软来说还很薄弱。他们确实应该有64位工具集,因为如今我们正在处理大数据,64位服务器和桌面环境。


1
以我为例,RedGate SQL Prompt正在与内置于intellisense中的SSMS进行斗争。关闭SSMS intellisense也可以使SQL Prompt更好地工作。
TTT

1

对于SQL 2008 R2,内存查询命令(来自Aaron Bertrand的帖子)如下所示

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Total Server Memory (KB)';

SELECT object_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)');

-- SQL Server 2012:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

-- Prior versions:
SELECT physical_memory_in_bytes FROM sys.dm_os_sys_info;

另请注意,该命令

EXEC sp_configure 'max server memory';

除非您启用了高级选项,否则可能无法工作。例如先做

EXEC sp_configure 'show advanced options',1
RECONFIGURE

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.