sql server 2005 sp3内存不足,无法运行查询问题

时间:2010-07-21 20:06:13

标签: sql-server sql-server-2005

我正在尝试在数据库上执行大约200个内部联接的大量查询。它给我以下错误

Msg 701, Level 17, State 123 Line 1

我在具有2GB RAM的双核2.7 GHz机器上运行数据库。 有什么办法可以让这个查询执行吗?

3 个答案:

答案 0 :(得分:3)

这听起来像是一个桌面设计问题,你究竟在加入200张桌子吗?这很可能是问题,只能通过重新设计来解决。

Maximum Capacity Specifications for SQL Server

Columns per SELECT statement   4,096
REFERENCES per table           253
Tables per SELECT statement    Limited only by available resources

答案 1 :(得分:2)

如果你属于EAV trap,那么200个连接实际上很常见。如果你有一个包含200列的实体,那么你就有200个连接!

当然,SQL Server对200个连接没有问题,但很可能它错误地计算了所需的内存量。对于hash joins来说尤其如此,它可以交换内存以获得更好的性能。因此,第一步是用循环连接替换所有连接,例如inner loop join。循环连接只需要很少的内存。

如果不能解决问题,请查看执行计划。真正的计划可能不会使它超过内存错误,但您可以看到估计的执行计划:

SET SHOWPLAN_ALL ON

来自文档:

  

当SET SHOWPLAN_ALL为ON时,SQL   服务器返回执行信息   对于每个语句而不执行   它和Transact-SQL语句是   没有执行

这可以提供关于SQL计划做什么的线索。

答案 2 :(得分:0)

出于好奇,您所有的FK字段都被索引了吗?

是否有某种方法可以将其拆分为多个连接数较少的查询?例如,如果您正在进行插入,您可以只插入确保记录唯一性的主要字段,然后单独更新以获取其余信息吗?