内存不足sql执行

时间:2013-10-22 19:59:42

标签: sql sql-server

我有以下脚本:

SELECT 
    DEPT.F03 AS F03, DEPT.F238 AS F238, SDP.F04 AS F04, SDP.F1022 AS F1022, 
    CAT.F17 AS F17, CAT.F1023 AS F1023, CAT.F1946 AS F1946 
FROM 
    DEPT_TAB DEPT 
LEFT OUTER JOIN 
    SDP_TAB SDP ON SDP.F03 = DEPT.F03, 
CAT_TAB CAT 
ORDER BY 
    DEPT.F03

表是巨大的,当我直接在SQL Server中执行脚本时,执行需要大约4分钟,但是当我在第三方程序(基于Delphi的SMS LOC)中运行它时,它会给我错误

<msg> out of memory</msg> <sql> the code </sql>

无论如何我可以减轻要执行的脚本吗?或者有没有人有同样的问题并以某种方式解决了它?

3 个答案:

答案 0 :(得分:3)

我记得在查询优化器丢失跟踪并尝试以硬件无法处理的方式解决问题时,不得不求助于ROBUST PLAN查询提示一次。

=&GT; http://technet.microsoft.com/en-us/library/ms181714.aspx

但我不确定我理解为什么它适用于一种'技术'而不是另一种'技术'。 然后,错误消息可能不是来自SQL,而是来自收集输出的第三方程序,并且以“不太理想”的方式执行此操作。

答案 1 :(得分:1)

考虑将paging添加到用户编辑屏幕和基础数据调用。关键是你不需要一次看到所有行,但是根据请求它们可供用户使用。

这将缓解您的大部分性能问题。

答案 2 :(得分:0)

我有一个项目,我必须通过批处理添加超过700万个单独的T-SQL代码行(无法弄清楚如何以编程方式利用新的SEQUENCE命令)。问题是我的VM上可用的内存有限(我为此VM分配了最大内存量)。由于大量的T-SQL代码,我不得不首先测试服务器崩溃之前可能需要多少行。无论出于何种原因,SQL(2012)都不会释放它用于大型批处理作业的内存,例如我的内存(我们谈论的是12 GB的内存)所以我不得不每隔几百万行重新启动服务器。如果您的项目资源有限,则可能需要这样做。