![由于内存不足,无法在 SQL Server 上运行查询?](https://linux22.com/image/491154/%E7%94%B1%E4%BA%8E%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3%EF%BC%8C%E6%97%A0%E6%B3%95%E5%9C%A8%20SQL%20Server%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%9F%A5%E8%AF%A2%EF%BC%9F.png)
如何释放 SQL Server 上的一些 RAM(显示可用 77MB)。当我尝试运行查询时,出现错误,提示无法启动线程,RAM 不足。它使用了 5000+ MB 中的 77MB 以外的所有内存。
答案1
您是否设置了“最大服务器内存”选项。SQL 可能会占用所有可用内存,从而导致您所描述的情况发生。
您可以按如下方式检查和设置。它不需要重新启动系统或重新启动 SQL 服务。
--检查最大内存设置
sp_configure'显示高级选项',1
去
重新配置
去
sp_configure ‘最大服务器内存 (MB)’
去
如果 run_value 为 2147483647 或大于服务器上的实际 RAM,则根据服务器上的实际 RAM 进行设置,留出一些用于操作系统。
sp_configure'最大服务器内存(MB)',4096-4GB
去
重新配置
去
此外,如果是 32 位 SQL Server Enterprise,您可能希望考虑设置 AWE
答案2
如果您拥有大量来自 Web 服务器池的并发用户,您可能能够降低池线程数并释放足够的资源而不会中断系统。
另外,您也可以随时停止短时间内不严格的必要服务,同时尝试释放一些空间。
我在这里假设您只想释放足够的空间来连接到查询窗口,然后找出正在消耗资源的其他情况。如果此问题经常发生,那么我建议您在一天早些时候打开查询窗口并每隔几分钟运行 sp_who2 以保持连接处于活动状态,直到服务器填满并且无法创建新线程。
我还建议您启动 perfmon 并开始监控 SQL Server 内存、连接和数据库级别统计数据,并开始查找对您造成损害的异常应用程序。如果这种情况经常发生,那么您要么有一段糟糕的代码,要么普遍存在糟糕的编程,要么确实需要升级。