我正在使用Microsoft SQL Server 2012,并尝试在Management Studio中对其执行简单查询。我收到以下错误(在SSMS中,在服务器上运行):
执行批处理时发生错误。错误消息是:引发类型'System.OutOfMemoryException'的异常。
系统已安装24GB RAM,但在任务管理器中查找sqlservr.exe进程仅使用2.9GB。
是否存在某个设置会限制其RAM使用率?
我正在使用Microsoft SQL Server 2012,并尝试在Management Studio中对其执行简单查询。我收到以下错误(在SSMS中,在服务器上运行):
执行批处理时发生错误。错误消息是:引发类型'System.OutOfMemoryException'的异常。
系统已安装24GB RAM,但在任务管理器中查找sqlservr.exe进程仅使用2.9GB。
是否存在某个设置会限制其RAM使用率?
Answers:
此错误表明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。
Mike说对了,您收到的错误消息是来自Management Studio应用程序本身,而不是SQL Server。这是您本地工作站上的内存已用尽,这很可能是由于尝试向客户端应用程序中拉入160亿行造成的(就网格而言,渲染网格中的大量数据非常昂贵,因此请尝试使用TOP
etc 限制查询。-我不知道您可以用足够的数据来做些实际的事情,以至于无论如何都要用完所有本地内存)。
但是我确实想解决另一个问题:使用任务管理器评估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 Server Management Studio开放了几天。我重新启动它,并解决了。
我发现关闭IntelliSense会有所帮助。我还建议检查您拥有的所有加载项(RedGate工具和ApexSQL之类的东西对于我来说也使问题更加严重)。
这个问题困扰了我好几天,老实说,它对微软来说还很薄弱。他们确实应该有64位工具集,因为如今我们正在处理大数据,64位服务器和桌面环境。
对于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
请注意,这存在Microsoft连接问题,因为它是SSMS内存泄漏。他们认为他们在v16.5中解决了它
单击此处查看Connect.microsoft.com上的问题
如果您安装了最新版本,但仍然有问题,请对其进行投票以重新打开。