我不知道这个问题是否属于这里或StackOverflow。 我试图在这里,因为我的问题是关于内存泄漏和pipe理的东西比编程。
我有一个SQL脚本,我试图运行,每次服务器响应是:
No sufficient memory to complete this query
(这是主要的想法,而不是确切的消息)
现在,脚本有超过5万行插入,如下面的例子:
1 =>
insert into Cities ([Name]) values (N'MyCityName')
2 =>
insert into Sectors ([Name], [Description], City_CityId)( select N'FirstSector', N'1at Sect. Desc.', c.CityId from Cities c where c.[Name] like N'MyCityName')
3 =>
insert into Streets ([Name], Direction_Value, Type_Value, SectorId, City_CityId)( select N'1st Street', 0, 10, s.SectorId, c.CityId from Cities c inner join Sectors s on s.City_CityId = c.CityId where c.[Name] like N'MyCityName' and s.[Name] like N'FirstSector')
4 =>
insert into Addresses (StreetNumber, NumberSuffix_Value, UnitSuiteAppt, StreetId, SectorId, CityId)( select 999, 0, N'', st.StreetId, s.SectorId, c.CityId from Cities c inner join Sectors s on s.City_CityId = c.CityId inner join Streets st on st.SectorId = s.SectorId and st.City_CityId = c.CityId where c.[Name] like N'MyCityName' and s.[Name] like N'FirstSector' and st.[Name] like N'1st Street')
5 =>
insert into People (Surname, FirstName, IsActive, AddressId)( select N'TheSurname', N'TheFirstName', 1, a.AddressId from Addresses a inner join Cities c on c.CityId = a.CityId inner join Streets s on s.StreetId = a.StreetId where a.StreetNumber = 999 and a.NumberSuffix_Value = 0 and a.UnitSuiteAppt = N'' and c.[Name] like N'MyCityName' and s.[Name] like N'1st Street')
所以,我有每条指令的编号如下:
1 => 2;
2 => 5;
3 =>〜700;
4 =>〜35000;
5 =>〜35000;
执行那些成千上万的指令将驱使我去解决内存不足的问题。 而当我打开任务pipe理器,我有SSMS需要超过400MB的RAM。
我的configuration如下所述:
Lenovo W700ds 2x320GB HDD 7200RPM RAID 0 4GB RAM DDR3 Intel Core 2 Quad 2.0GHz 6MB L2 Windows 7 Professional 64bits (/w all updates) SQL Server 2005 Express services running (That is my data server, I'm not using 2008 for this project) SQL Server Management Studio 2008 Express (SP3 installed /w all updates)
我只有在执行插入指令时才运行SSMS2008应用程序。
通过系统优化或其他更新来渲染这种情况的任何想法都是非常值得赞赏的。
你只需要安装更多的内存。 4GB在现代系统上是没有的。 仅仅因为SSMS是唯一运行的程序,并不意味着它是唯一使用内存(服务是一个大的)。 另外,由于您正在运行快速版,您可能尚未configurationSQL Server的内存使用情况,默认情况下会尝试抓取所有可能的内存。
您可以通过查看perfmon中的工作集来查看进程是否有内存泄漏。