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


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



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

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

#1 楼

此错误表明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。

#2 楼

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

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


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

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


您可以将其另存为工具>选项>环境>键盘>查询中的查询快捷方式。快捷方式,并在查询窗口中获得准确的结果要比从任务管理器获得不正确的结果快得多。 br />
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服务器,则命令略有不同。病态在这些服务器的下方添加了另一篇文章,因为后续评论的格式不够好,无法放在此处

–大卫·布里奇
16 Nov 16在10:29



#3 楼

我也是一样。我的SQL Server Management Studio开放了几天。我重新启动它,然后解决了。

#4 楼

我发现关闭IntelliSense会有所帮助。我还建议检查您拥有的所有加载项(RedGate工具和ApexSQL之类的东西也使我感到更加恼火)。他们确实应该有64位工具集,因为如今我们正在处理大数据,64位服务器和桌面环境。

评论


在我的案例中,RedGate SQL Prompt与内置于智能感知的SSMS进行了对抗。关闭SSMS intellisense也可以使SQL Prompt更好地工作。

– TTT
17年1月26日在16:45



#5 楼

对于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';


#6 楼

请注意,这存在Microsoft连接问题,因为它是SSMS内存泄漏。他们认为他们已在v16.5中解决了该问题。

通过单击此处查看Connect.microsoft.com上的问题。

如果安装了最新版本但仍然有问题,请投票

此处的SSMS v16.5

连接问题表明内存泄漏已在16.5中修复