我们的承保公司刚给我们发了一份线索的数据摘录。有900万行。行由LeadID (guid)、RawLeadXML (可能是3-4Kbmax)和一个LeadStatusID (int)组成。
我首先尝试添加一个自动编号整数,并使其成为此表的主键。好的,它添加了这个字段,但是不能使它成为主键(缓冲池中没有足够的内存)。
我需要做的是获取每条记录,1乘1,然后获取XML,将其放入.Net中的一个.Net对象中,去掉我想要的所有字段(名字、姓氏等),并将解析的信息存储到另一个表中。
我甚至无法运行以下语句:从id介于1到1000之间的引线选择*
如果我一次只选择1000条记录(从引线中选择前1000条*),那么如何选择下1000条记录而不需要某种参考点?
我的机器有4个处理器(2.53Ghz)和12 GB的RAM。它不是服务器,但它是一台强大的机器。老实说,我不知道下一步该做什么。
编辑:我忽略了原始文件实际上是一个MDF (以及相关的LDF)文件,所以我只是在Server中附加到它们。
编辑2:我搞砸了,说RawLeadXML列是XML --不是,它只是nvarchar(max)。老实说,我不知道有xml数据类型。
EDIT 3:我甚至不能在这个表上发布一个delete语句:“从leadid = '100a7927-5311-4f12-8fe3-95c079d32dd4‘的引线中删除”“与:
Msg 802, Level 17, State 20, Line 2
There is insufficient memory available in the buffer pool.我不知道下一步该怎么办。这到底是怎么回事?世界上有成千上万的数据库,记录比我多。
编辑4:如果有人关心,下面的解决方案都不起作用。我确信这是我的机器的一个限制,绝对不是对我收到的下面的精确答案的谴责。目前,我正在将压缩DB (2.6GB)传输到Rackspace中的服务器上,然后我将尝试在该硬件上添加一个索引,希望不会破坏我们的生产服务器。一旦索引被添加,我希望我可以压缩db并将它带回到我的本地机器,然后能够实际使用它做一些事情。
编辑5:我的机器实际上无法处理这样大小的表。我的机器有12 GB内存,64位Windows 7专业版,一个四核2.53Ghz处理器,SSD驱动器等。它是相当强大的一台开发机器。它处理不了这事。
因此,我将DB移动到位于伦敦Rackspace的服务器上。48 GB或内存在那一个,它能够添加我需要的索引。即使在那之后,我的机器也无法用它做任何有用的事情,所以我编写了一个在伦敦运行的.Net程序,每次输出1000条记录,将它们解析到另一个表中,然后将原始记录标记为已处理。
一旦我这样做了,我将不得不离开DB在伦敦,因为我怀疑我是否能够写任何有意义的报告针对这个怪物在当地。这将使开发变得有趣。
汇总:我认为,如果不使用至少48 GB内存的服务器类硬件,就无法处理这么大的数据集(在我的例子中)。
发布于 2011-04-26 18:25:01
关于
https://stackoverflow.com/questions/5794576
复制相似问题