包銷公司剛給我們送來引線的數據提取。有900萬行。這些行由LeadID(guid),RawLeadXML(xml - 最大可能爲3-4kb)和LeadStatusID(int)組成。巨大的表(9萬條記錄)
我第一次嘗試添加一個自動編號整數,並使其此表的主鍵。那麼,它添加了該字段,但無法使其成爲主鍵(緩衝池中沒有足夠的可用內存)。
我需要做的是將每個記錄逐一取出並獲取XML,將其放入.Net中的XmlDocument對象中,去掉所有我想要的字段(名字,姓氏等),並將解析的信息存儲到另一個表中。
我甚至無法獲得此聲明運行:SELECT * FROM信息,其中編號1和1000
之間
如果我只是在一個時間選擇1000條記錄(前1000 *從信息中選擇),這樣的作品,但是我怎麼會選擇沒有某種參考點的下一個1000條記錄呢?我的機器有4個處理器(2.53GHz的)和12 GB的RAM。它不是一臺服務器,但它是一臺強健的機器。老實說,我不知道下一步該怎麼嘗試。
編輯:我離開了原來的文件實際上是一箇中密度纖維板(以及相關的LDF)文件,所以我重視他們在SQL Server中。
編輯2:我搞砸了,並表示,RawLeadXML列是XML - 它不是,它只是爲nvarchar(最大)。我真的不知道那裏是一個XML數據類型。
編輯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.6 GB)到我們的服務器在Rackspace公司,然後我將嘗試在該硬件上增加一個索引,希望不採取了我們的生產服務器。一旦添加了索引,我希望我可以壓縮數據庫並將其重新下載到本地計算機,然後實際上可以對其進行操作。
編輯5:我的機器字面上無法處理這種大小的表格。我的機器有12 GB RAM,64位Windows 7 Professional,四核2.53Ghz處理器,SSD驅動器等。這對於開發機器來說非常有用。它無法處理這個問題。
所以,我搬到了DB我們在Rackspace公司在倫敦的服務器。 48 GB或內存中,並能夠添加我需要的索引。即使在那之後,我的機器在這裏無法做任何事情都那麼有用了下來,所以我寫了在倫敦運行的撲救記錄1000的時間,把它解析爲另一個表,然後一個.net程序將原始記錄標記爲已處理。
一旦我這樣做,我將不得不離開數據庫在倫敦,因爲我懷疑我可以在本地寫出任何有意義的報告來對付這個怪物。這會讓開發變得有趣。
摘要:我相信沒有好的方法來處理這個大的數據集,而不使用具有至少48 GB的RAM(在我的情況下)的服務器級硬件。
做了沒有where子句的select,開始返回行嗎?如果是這樣,那似乎是一種選擇。如果沒有,你是否還有原始文本文件?直接處理該文件會更容易,而不必使用數據庫? – forsvarir 2011-04-26 18:17:52
對不起,只是編輯了這個問題。沒有CSV或任何東西,他們是mdf和ldf文件。 – 2011-04-26 18:43:10
但是rawlead列,在nvarchar max中是否存在xml? – Ivo 2011-04-26 18:51:56