Mat*_*wdy 8 sql-server-2008 windows-7
我们的承保公司刚刚向我们发送了潜在客户的数据摘录.有900万行.行包括LeadID(guid),RawLeadXML(xml - 可能最大3-4kb)和LeadStatusID(int).
我首先尝试添加一个自动编号整数,并使其成为该表的主键.好吧,它添加了字段,但无法使其成为主键(缓冲池中没有足够的可用内存.)
我需要做的是获取每个记录,逐个1,并获取XML,将其放入.Net中的XmlDocument对象,删除我想要的所有字段(名字,姓氏等)并将解析后的信息存储到另一张桌子.
我甚至无法运行此语句:select*from Leads其中id介于1和1000之间
如果我一次只选择1000条记录(从Leads中选择前1000条),那就可行,但是如何在没有某种参考点的情况下选择接下来的1000条记录呢?
我的机器有4个处理器(2.53Ghz)和12 GB的RAM.它不是服务器,但它是一台强大的机器.老实说,我不知道下一步该尝试什么.
编辑:我遗漏了原始文件实际上是一个MDF(和相关的LDF)文件,所以我只是在SQL Server中附加到它们.
编辑2:我搞砸了说RawLeadXML列是XML - 它不是,它只是nvarchar(max).老实说,我不知道有一个xml数据类型.
编辑3:我甚至无法在此表上发出删除声明:"从leadid ='100a7927-5311-4f12-8fe3-95c079d32dd4'的引线中删除"爆炸:
Msg 802, Level 17, State 20, Line 2
There is insufficient memory available in the buffer pool.
Run Code Online (Sandbox Code Playgroud)
我不知道接下来该做什么.这到底是怎么回事?世界上有成千上万的数据库,记录的数量超过了我的数据.
编辑4:如果有人关心,以下解决方案均无效.我确信这是我机器的限制,绝对不是对我在下面收到的好答案的谴责.目前,我正在将压缩数据库(2.6 GB)传输到Rackspace中的服务器,然后我将尝试在该硬件上添加索引,希望不会关闭我们的生产服务器.一旦添加了索引,我希望我可以压缩数据库并将其恢复到我的本地计算机,然后能够实际执行某些操作.
编辑5:我的机器实际上无法处理这种尺寸的桌子.我的机器有12 GB RAM,64位Windows 7专业版,四核2.53Ghz处理器,SSD驱动器等.它对于开发机器来说非常强大.它无法解决这个问题.
所以,我将数据库移到伦敦Rackspace的服务器上.48 GB或那个内存,它能够添加我需要的索引.即使在那之后,我的机器也无法做任何对它有用的事情,所以我写了一个在伦敦运行的.Net程序,一次输出1000个记录,将它们解析到另一个表中,然后将原始记录标记为已处理.
一旦我这样做,我将不得不离开伦敦的数据库,因为我怀疑我能在本地写出任何有意义的报告来反对这种怪异.这将使开发变得有趣.
简介:我认为没有使用至少48 GB RAM的服务器类硬件(在我的情况下)处理这么大的数据集的好方法.
900 万行并不算大,您可能在 LeadId 列上没有索引。首先创建一个,尽管这需要一些时间(不必是唯一的或主键)。比对第一个查询使用“SELECT TOP 1000 LeadId, RawXML ORDER BY LeadId”。记录最后的 LeadId (MaxLeadId) 值,使用“SELECT TOP 1000 LeadId, RawXMLWhere LeadId > MaxLeadId ORDER BY LeadId”等...
| 归档时间: |
|
| 查看次数: |
6917 次 |
| 最近记录: |