Вставка большого BLOB занимает много времени

Я строю сложное приложение. Часть этого приложения - это агент, который работает на других серверах и отправляет данные в веб-службу (ASP MVC)-> JSON. В контроллере я конвертирую данные в XML и вызываю хранимую процедуру, которая хранит их в таблице. Задание агента SQL собирает данные и выполняет необходимые операции создания, обновления и удаления для некоторых таблиц.

Все идет нормально...

Проблема здесь в скорости. Сгенерированный XML имеет размер нескольких МБ. В настоящее время его ~16 МБ. Вставка строки XML в новую строку БД занимает 5-6 секунд.

Что я попробовал:

  • Изменил столбец БД на XML. Тот же результат!
  • Я думал, что проблема в Entity Framework. Я заменил этот код хранимой процедурой. Тот же результат!
  • Удалены все операторы из SP -> пустая хранимая процедура. Тот же результат!
  • Изменен тип параметра со строки /nvarchar(max) на byte[]/varbinary(max). Это принесло некоторое улучшение. Теперь это на 50% быстрее. Но все еще медленно.

Кажется, что передача этой большой строки или байтового массива на сервер SQL занимает очень много времени!

Что я могу сделать, чтобы получить это быстрее?

Я подумал о следующем: - Поместить данные в файловую систему и дать команду SQL-серверу обработать их, используя SELECT FROM OPENROWSET.

Есть ли альтернативы?

1 ответ

Попробуйте выполнить свою операцию SQL асинхронно. Надеюсь, вам не нужен немедленный результат.

Threading.ThreadPool.QueueUserWorkItem(new Threading.WaitCallback(InsertBLOB), MyBLOB);

Недостатком этого подхода является то, что вы не будете получать ошибки во время выполнения.

Другие вопросы по тегам