Огромная таблица (9 миллионов записей) на сервере SQL

Наша андеррайтинговая компания только что прислала нам отрывок из данных о потенциальных клиентах. Есть 9 миллионов строк. Строки состоят из LeadID (guid), RawLeadXML (xml - возможно, максимум 3-4 КБ) и LeadStatusID (int).

Сначала я попытался добавить целое число автонумера и сделать его первичным ключом этой таблицы. Что ж, он добавил поле, но не смог сделать его первичным ключом (в пуле буферов недостаточно памяти).

Мне нужно взять каждую запись, 1 на 1, и получить XML , поместить его в объект XmlDocument в .Net, вырезать все поля, которые мне нужны (имя, фамилию и т. д.), и сохранить полученную проанализированную информацию в другой таблице.

Я даже не могу запустить этот оператор: select * from Leads, где id от 1 до 1000

Если я просто выберу 1000 записей за раз (выберите 1000 лучших * из Leads), это сработает, но как мне тогда выбрать следующие 1000 записей без какой-либо контрольной точки?

На моей машине 4 процессора (2,53 ГГц) и 12 ГБ ОЗУ. Это не сервер, но это мощная машина. Я не Честно говоря, я не знаю, что делать дальше.

EDIT : Я не учел, что исходный файл был на самом деле файлом 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.

У меня есть не знаю, что делать дальше. Какого черта это вообще проблема? В мире существуют тысячи баз данных с большим количеством записей, чем у меня.

РЕДАКТИРОВАТЬ 4 : В случае, если кому-то интересно, ни одно из нижеприведенных решений не помогло. Я уверен, что это ограничение моей машины, и определенно не осуждение прекрасных ответов, которые я получил ниже. В настоящее время я передаю заархивированную БД (2,6 ГБ) на наши серверы в Rackspace, а затем я попытаюсь добавить индекс на это оборудование, надеюсь, без отключения наших производственных серверов. После добавления индекса я надеюсь, что я смогу заархивировать базу данных и вернуть ее на свою локальную машину, а затем действительно что-нибудь с ней сделать.

РЕДАКТИРОВАТЬ 5 : Моя машина была буквально неспособен обрабатывать стол такого размера. Моя машина имеет 12 ГБ ОЗУ, 64-разрядную Windows 7 Professional, четырехъядерный процессор с частотой 2,53 ГГц, SSD-накопитель и т. Д. Это довольно мощно для машины разработки. И он не мог с этим справиться.

Итак, я переместил БД на наш сервер в Rackspace в Лондоне. 48 ГБ или память в нем, и он смог добавить нужный мне индекс. Даже после этого моя машина здесь не смогла сделать с ней ничего полезного, поэтому я написал программу .Net, которая работает в Лондоне, чтобы выводить записи по 1000 за раз, анализировать их в другую таблицу, а затем отмечать исходные записи как обработано.

Как только я это сделаю, мне придется оставить БД в Лондоне, потому что я сомневаюсь, что смогу написать какие-либо значимые отчеты против этого чудовища на местном уровне. Это сделает разработку интересной.

Резюме : Я считаю, что нет хорошего способа обработать такой большой набор данных без использования оборудования серверного класса с как минимум 48 ГБ ОЗУ (в моем случае).

8
задан Brian Tompsett - 汤莱恩 26 February 2017 в 12:18
поделиться