2009-03-31 4 views
1

У меня есть небольшое приложение, которое читает XML-файлы и вставляет информацию о SQL DB.Воспользуйтесь несколькими ядрами, выполняющими операторы SQL

Есть ~ 300 000 файлов для импорта, каждый из которых имеет 1000 записей.

Я начал приложение на 20% файлов, и он работает в течение 18 часов, надеюсь, я смогу улучшить это время для остальных файлов.

Я не использую многопоточный подход, но поскольку компьютер, на котором я запускаю процесс, имеет 4 ядра, я думал об этом, чтобы добиться некоторого улучшения производительности (хотя, я думаю, главная проблема заключается в том, ввод-вывод, а не только обработка).

Я думал об использовании метода BeginExecutingNonQuery() для объекта SqlCommand, который я создавал для каждой вставки, но я не знаю, следует ли ограничить максимальное количество одновременных потоков (и я не знаю, как это сделать).

Каков ваш совет, чтобы получить лучшее использование ЦП?

Благодаря

ответ

0

Посмотрите на bulk insert.

Импортирует файл данных в таблицу базы данных или просматривать в указанном пользователем формате.

0

Вы пытались использовать SqlBulkCopy? В основном, вы загружаете свои данные в экземпляр DataTable, а затем используете класс SqlBulkCopy для загрузки его на SQL Server. Если вы предлагаете ОГРОМНОЕ повышение производительности без каких-либо изменений в текущем процессе, как использование bcp или другой утилиты.

+0

Дело в том, что я должен сделать небольшую обработку информации перед ее вставкой, в основном файлы содержат информацию, которая идет в 4 разных таблицах, но я посмотрю, это может быть полезно. Спасибо – willvv

+0

Он должен помочь даже в этом случае - возможно, вам понадобится 4 DataTables для хранения результатов вашей обработки, но в любом случае вы должны улучшить свою производительность. –

2

Если вы правильно поняли, вы читаете эти файлы на том же компьютере, на котором запущена база данных. Хотя я мало знаю о вашей машине, я уверен, что ваше узкое место - диск IO. Это звучит не очень интенсивно для меня.

+0

Я знаю, что процесс не является интенсивным с точки зрения вычислений, но я предполагаю, что если я сделаю 4 одновременных ввода, SQL воспользуется несколькими ядрами и сделает это более эффективным способом. И да, IO интенсивный, но по крайней мере я хочу, чтобы SQL был настолько занят, насколько я могу. – willvv

+0

Затем убедитесь, что вы читаете файлы с другого физического диска, а затем держите db. – innaM

Смежные вопросы