|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Что-то не смог нагуглить подобную проблему. Храню файл в MSSQL в varbinary(max) Тупая таблица id+content Загружаю и выгружаю с помощью ADO.NET Сервер БД удаленный, канал широкий. Сохранение в БД файла происходит достаточно быстро 10Мб - 5 сек, 50Мб - 20сек. Но вот скачивание разительно отличается. 10Мб - 5 сек, 50Мб - 100 сек. Торможение происходит непосредственно на выполнении запроса - ExecuteScalarAsync или ExecuteReaderAsync По профайлеру вижу, что почти все 100 сек тратятся на выполнение запроса. Если этот запрос выполнить из студии - всё ок, тормозов нет. Код примерно такой Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Можно, конечно, читать файл по частям и собирать на сервере приложений, но может есть способ проще? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 19:04 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Pro, Пробуй без async для теста. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:28 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Petro123Shocker.Pro, Пробуй без async для теста.то же самое ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:29 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123Shocker.Pro, Пробуй без async для теста.то же самоетолько менять все частями. Может с настройками сети что? Размер пакетов.... Проще запустить на другой машине, сменить дрова, базу. У меня сиквела нету. Оракл и постгри. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:44 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Тупой вопрос: индекс по id есть? Если интенсивная вставка идет и записи не меняются то Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:54 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
При запуске сервера приложений на сервере (ближе к серверу БД и дальше от клиента) - то же самое. Еще заметил, пока выполняется этот запрос, на сервере приложений сильно поднимается использование процессора. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:56 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Dima TТупой вопрос: индекс по id есть? Если интенсивная вставка идет и записи не меняются то Код: c# 1.
не, с этой базой ничего не происходит, кроме моих экспериментов. id - кластерный ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 20:57 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Proне, с этой базой ничего не происходит, кроме моих экспериментов. id - кластерный Претензию в MS напиши, явно же их косяк. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 21:01 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Pro, це классика - ms sql быстро в студии медленно в приложении ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 21:16 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
buserShocker.Pro, це классика - ms sql быстро в студии медленно в приложении И какой момент из этого цикла статей мне мог бы быть полезен в моем случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 21:20 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Proна сервере приложений сильно поднимается использование процессора.там еще есть вкладка Передано байт по сети. И это же в значке сети - свойства сетевого подключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 23:27 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.ProПо профайлеру вижу, что почти все 100 сек тратятся на выполнение запроса. Если этот запрос выполнить из студии - всё ок, тормозов нет. а какой конкретно запрос показывается в профайлере, и с каким планом выполнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 05:34 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
stenford, +1 Надо сверять планы выполнения. Скорее всего причина банальная. Окапечатка, невнимательность. Проверь все на свежую голову. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 07:15 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
>Shocker.Pro, вчера, 19:04 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1305767&msg=21741945][21741945] >Что-то не смог нагуглить подобную проблему… <Посмотри здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 08:48 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
stenfordа какой конкретно запрос показывается в профайлере, и с каким планом выполнения?Так план-то тупейший, тут планировать нечего - кластерный индекс. КМК, проблема где-то с выделением памяти на стороне сервера приложений что ли... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:13 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
ВМоисеев>Что-то не смог нагуглить подобную проблему… <Посмотри здесь . Еще раз. Базу пока никто не эксплуатирует, пользователей нет. Единственная таблица с двумя полями. Выборка одной записи по кластерному индексу, тут в принципе нечему тупить. Выборка контента небольшого размера осуществляется в разумное время. Тут, как мне кажется, проблема не на стороне СУБД вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:18 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Pro, Пробуй не ридером получить, а DataAdapter ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:31 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Pro, может вы чего то не договариваете? Или что-то не то сравниваете? в профайлере часом не sp_executesql? простой тест в ssms: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:42 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
buserShocker.Pro, может вы чего то не договариваете? Или что-то не то сравниваете? в профайлере часом не sp_executesql?если выполняю с параметрами, то sp_executesql, если с простой подстановкой - то прямой запрос (см. закомментированные строки в моем первом посте). Оба варианта выполняются 100 секунд. buserпростой тест в ssms:одинаково. 6 секунд для 50Мб файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 11:59 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Petro123Пробуй не ридером получить, а DataAdapterСм. закомментированные строки - я даже вообще без любого ридера пытаюсь получить набор байт - результат тот же. Датаадаптер - всего лишь надстройка над ридером. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:01 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.ProТак план-то тупейший, тут планировать нечего - кластерный индекс. КМК, проблема где-то с выделением памяти на стороне сервера приложений что ли... я имел ввиду sql profiler, если запрос отобажаемый в нем (именно в нем, а не напрямую в студии или еще как) показывает что запрос отрабатывает быстро, то база точно непричем. Тогда можно было-бы либо попробовать какой-нибудь другой метод доступа (другую либу, EF итд), либо разобраться с какого именно размера файлы начинают тормозить (раз написал что 10 метров скачивается быстро) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:19 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123Пробуй не ридером получить, а DataAdapterСм. закомментированные строки - я даже вообще без любого ридера пытаюсь получить набор байт - результат тот же. Датаадаптер - всего лишь надстройка над ридером. Это? return (byte[])res; Хммм. Не знал. Ну тогда труба твое дело. Меняй машину, жену, дом и компьютер)). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:20 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
stenfordя имел ввиду sql profiler, если запрос отобажаемый в нем (именно в нем, а не напрямую в студии или еще как) показывает что запрос отрабатывает быстро, то база точно непричем.Shocker.ProПо профайлеру вижу, что почти все 100 сек тратятся на выполнение запросаНо база все равно может быть не причем, так как завершение запроса в профайлере будет показано только тогда, когда клиент заберет все данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:26 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
Shocker.Pro, тут несколько букв... не знаю, может похоже на ваш кейс Horrible performance when using SqlCommand Async methods ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:35 |
|
Скачивание большого BLOB через ADO.NET
|
|||
---|---|---|---|
#18+
buserShocker.Pro, тут несколько букв... не знаю, может похоже на ваш кейс Horrible performance when using SqlCommand Async methods Похоже, однако, спасибо! Я для начала нафиг убрал вообще все асинхронные вызовы, включая коннекшен и обернул все в один общий Task.Run - все стало летать. Ща поэкспериментирую, на чем именно затыкалось. ЗЫ: А Петя был прав с самого начала. Я изначально пробовал без Async, но без ридера кажется. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 12:50 |
|
|
start [/forum/topic.php?fid=17&msg=39737285&tid=1349151]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 421ms |
0 / 0 |