38 sql-server ssms sql-server-2012
我正在使用 Microsoft SQL Server 2012 并尝试在 Management Studio 中针对它运行一个简单的查询。我收到以下错误(在 SSMS 中,在服务器上运行):
执行批处理时发生错误。错误消息是:抛出了“System.OutOfMemoryException”类型的异常。
系统安装了 24GB 的 RAM,但在任务管理器中查看 sqlservr.exe 进程仅使用 2.9GB。
某处是否有限制其 RAM 使用的设置?
小智 40
此错误表明 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。
Aar*_*and 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)';
Run Code Online (Sandbox Code Playgroud)
您可以将其保存为工具 > 选项 > 环境 > 键盘 > 查询快捷方式中的查询快捷方式,并且在查询窗口中获得准确的结果比从任务管理器中获得不准确的结果要快得多。
您还可以使用以下查询检查内存压力(以及您是否可以对此采取任何措施):
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';
Run Code Online (Sandbox Code Playgroud)
小智 9
我发现关闭 IntelliSense 有帮助。我还建议检查您拥有的任何加载项(RedGate 工具和 ApexSQL 之类的东西也加剧了我的问题)。
这个问题困扰了我好几天,老实说它对微软来说很弱。他们真的应该有 64 位工具集,因为我们现在正在处理大数据、64 位服务器和桌面环境。