Вставка большого 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);
Недостатком этого подхода является то, что вы не будете получать ошибки во время выполнения.