查询大型SQL表时出现System.OutOfMemoryException

时间:2014-04-28 18:13:20

标签: sql sql-server out-of-memory

我编写了一个如下所示的SQL查询:

SELECT * FROM MY_TABLE WHERE ID=123456789;

当我在SQL Server Management Studio的查询分析器中运行它时,查询永远不会返回;相反,大约十分钟后,我收到以下错误:System.OutOfMemoryException

我的服务器是Microsoft SQL Server(不确定是什么版本)。

SELECT * FROM MY_TABLE; -- return 44258086
SELECT * FROM MY_TABLE WHERE ID=123456789; -- return 5

这张桌子有四千多万行!但是,我需要获取五个特定的行!

我如何解决这个令人沮丧的错误?

编辑:服务器突然开始工作正常,但没有明显的原因,但我会将此问题留给任何想要为其他任何有此问题的人建议排查步骤的人。

2 个答案:

答案 0 :(得分:2)

根据http://support.microsoft.com/kb/2874903

  

出现此问题是因为SSMS没有足够的内存来分配   结果很好。   注意SSMS是一个32位进程。因此,它限制在2 GB   存储器中。

文章建议尝试以下方法之一:

  • 将结果输出为文字
  • 将结果输出到文件
  • 使用sqlcmd

您可能还想检查服务器以查看是否需要重新启动服务 - 也许它已经吞噬了所有可用内存?

另一个建议是选择较小的列子集(如果表有很多列或包含大的blob列)。

答案 1 :(得分:1)

如果您需要特定数据,请使用适当的WHERE子句。如果您对此感到困惑,请添加更多详细信息。

或者编写一个使用游标操作的小应用程序,而不是尝试将其完全加载到内存中。