Тайм-аут в LINQ to SQL для вставки миллионов записей - PullRequest
3 голосов
/ 03 мая 2010

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

"SqlExcepetion: истекло время ожидания. Период времени ожидания истек до завершения операции или сервер не отвечает."

Как лучше всего справиться с этим исключением? Есть ли способ предотвратить это или я должен поймать исключение?

Заранее спасибо!

Ответы [ 3 ]

10 голосов
/ 03 мая 2010

Если все, что у вас есть, это молоток, каждая проблема выглядит как гвоздь.

Серьезно, даже ПОПЫТКА использовать Linq2SQL для вставки 3 миллионов записей - неэффективный подход. ORM - это много хороших вещей, они НЕ являются объемными элементами вставки.

Я предлагаю:

  • Создать данные таблицы в файл
  • Загрузить файл с помощью соответствующих инструментов (механизм массовой загрузки). Вы будете удивлены производительностью (подсказка: я загружаю около 600 миллионов записей за 15 минут);)

Массовая загрузка имеет много преимуществ в производительности. Естественно, предполагая, что вы говорите о чем-то вроде процесса загрузки ETL здесь - но я не вижу 3-миллионную загрузку как что-либо, кроме хранилища данных / отчетности / архивирования в стиле операции загрузки, это определенно и по определению не является обработкой транзакций в реальном времени;)

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

3 голосов
/ 03 мая 2010

Создайте сценарий SQL (или строку) и выполните его напрямую.

L2SQL не предназначен для таких массовых операций.

2 голосов
/ 03 мая 2010

Я думаю, вам нужно увеличить CommandTimeout вашей команды.

Решение можно найти здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...