Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Медленная запись в удаленный SQL сервер / 19 сообщений из 19, страница 1 из 1
18.11.2016, 02:24
    #39349537
umrbek79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Привет народ.
Проблема такая. WinForms приложение на C# надо отправить большое кол-во записей (5000) на SQL сервер на хостинге.
Таблица небольшая, состоит из 9 столбиков.
Создаю временную таблицу, заполняю, коннект к SQL серверу, через SQLBULKCOPY копирую временную таблицу на удаленный сервер и SQL запросом добавляю в нужную мне таблицу.
Даже если я отправляю 10 записей, отправка идет около 3-х минут!!!
Раньше пробовал отправлять курсорно по одной записи - на 100 записей уходило около получаса!!!

Скорость интернета 2048 Кб/с.
Работаю на Visual Studio 2012
C#
SQL SERVER 2012

Помогите советом, как увеличить скорость отправки или скорость соединения с сервером, а то прога виснет (или показывает вид, что виснет), а клиент недоволен ((
...
Рейтинг: 0 / 0
18.11.2016, 07:03
    #39349559
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Размер одной записи в байтах какой?

По моему тут дело вовсе не в соединении.
Затестить просто: запусти SQL Managment studio на сервере где стоит MS SQL и сделай insert одной записи в свою таблицу. На 99% уверен что тоже будет тормозить. Если так - разбирайся с БД, смотри что там в триггерах понаписано.

Для 5000 записей не надо никаких BULKCOPY, это не много. В крайнем случае сначала во временную таблицу, а потом ее целиком в рабочую.
...
Рейтинг: 0 / 0
18.11.2016, 08:24
    #39349580
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Dima Tзапусти SQL Managment studio на сервере где стоит MS SQL и сделай insert одной записи в свою таблицу.такая проверка - не панацея
Медленно в приложении, быстро в SSMS
нужно запускать sql-профайлер и смотреть реальное время вставки записи
...
Рейтинг: 0 / 0
18.11.2016, 08:32
    #39349583
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
100% - что-то с сервером. Надо попробовать на другом
...
Рейтинг: 0 / 0
18.11.2016, 08:51
    #39349589
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Shocker.ProDima Tзапусти SQL Managment studio на сервере где стоит MS SQL и сделай insert одной записи в свою таблицу.такая проверка - не панацея
Медленно в приложении, быстро в SSMS
нужно запускать sql-профайлер и смотреть реальное время вставки записи
Сомневаюсь что это касается примитивного
Код: c#
1.
insert into MyTable (...) values (...)


Для чистоты эксперимента можно повторить тест из SSMS запущенный на машине клиента. ТС ведь канал подозревает.
...
Рейтинг: 0 / 0
18.11.2016, 09:02
    #39349594
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
umrbek79Помогите советом, как увеличить скорость отправки...Упакуй все insert-ы в один SQL-пакет (batch), и всё полетит, вместо того, чтобы запускать каждый insert в отдельном SQL-пакете. Тогда и временная таблица станет не нужна, пиши сразу в целевую таблицу.
...
Рейтинг: 0 / 0
18.11.2016, 09:04
    #39349597
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Ещё будет не плохо в начале поставить команду
Код: sql
1.
set nocount on
...
Рейтинг: 0 / 0
18.11.2016, 09:43
    #39349622
Смузи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Может задать вопрос тому, кто поддерживает "удаленный" сервер? Причин может быть много, режут канал, фаервол, при вставке пересчитывается индекс или срабатывает какой-то триггер. Гадать можно долго. Нужно отправить пример запроса в саппорт и узнать у них, почему так долго выполняется вставка.
...
Рейтинг: 0 / 0
18.11.2016, 20:09
    #39350122
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Алексей КЕщё будет не плохо в начале поставить команду
Код: sql
1.
set nocount on


Здорово, Динозавр!
Данный совет опоздал лет на 15
...
Рейтинг: 0 / 0
18.11.2016, 22:26
    #39350159
umrbek79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Dima TРазмер одной записи в байтах какой?

По моему тут дело вовсе не в соединении.
Затестить просто: запусти SQL Managment studio на сервере где стоит MS SQL и сделай insert одной записи в свою таблицу. На 99% уверен что тоже будет тормозить. Если так - разбирайся с БД, смотри что там в триггерах понаписано.

Для 5000 записей не надо никаких BULKCOPY, это не много. В крайнем случае сначала во временную таблицу, а потом ее целиком в рабочую.

Размер одной записи - 30-40 байтов
на сервере инсерты без проблем

я пишу через sqlbulkcopy во временную таблицу и одним запросом вношу во рабочую
...
Рейтинг: 0 / 0
18.11.2016, 22:54
    #39350166
WitC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
umrbek79,

когда-то была подобная проблема у коллеги.
была создана таблица не нормализированная. добавили первичный ключ.
...
Рейтинг: 0 / 0
19.11.2016, 06:27
    #39350215
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Если тормоза именно на вызове SqlBulkCopy.WriteToServer, то проблема в канале, и средствами C# её не решить. Собственно, для массовой вставки данных с клиента для MSSQL есть только 3 альтернативы: SqlBulkCopy, UDТT, и передача данных в виде XML. По моим наблюдениям, вторые две значительно тормознутее первой.
...
Рейтинг: 0 / 0
19.11.2016, 16:40
    #39350310
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Сон Веры Павловны,

а по моим 2 намного быстрее
...
Рейтинг: 0 / 0
19.11.2016, 17:12
    #39350315
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Сон Веры ПавловныЕсли тормоза именно на вызове SqlBulkCopy.WriteToServer, то проблема в канале, и средствами C# её не решить. Собственно, для массовой вставки данных с клиента для MSSQL есть только 3 альтернативы: SqlBulkCopy, UDТT, и передача данных в виде XML. По моим наблюдениям, вторые две значительно тормознутее первой.

в случае ТС 40*5000 = 200 кбайт - это массовая? это фигня
...
Рейтинг: 0 / 0
20.11.2016, 09:08
    #39350427
umrbek79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
всем спасибо,кто откликнулся.

оказывается программе остался кусок кода, который просматривает сервер покурсорно и я его не заметил.
изменил этот кусок и все отлично.

с sqlbulkcopy копирует на сервер 5 мб данных за 30 секунд.

ВСЕМ СПАСИБО!
...
Рейтинг: 0 / 0
20.11.2016, 15:26
    #39350495
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
umrbek79всем спасибо,кто откликнулся.

оказывается программе остался кусок кода, который просматривает сервер покурсорно и я его не заметил.
изменил этот кусок и все отлично.

с sqlbulkcopy копирует на сервер 5 мб данных за 30 секунд.

ВСЕМ СПАСИБО!
5 мб - 30 сек? ужас какой то
...
Рейтинг: 0 / 0
20.11.2016, 16:14
    #39350517
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
ViPRos5 мб - 30 сек? ужас какой то
канал 2 мегабита - никакого противоречия.
...
Рейтинг: 0 / 0
20.11.2016, 17:53
    #39350545
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
Изопропил,

про канал я пропустил мимо ушей :)
...
Рейтинг: 0 / 0
20.11.2016, 19:10
    #39350575
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Медленная запись в удаленный SQL сервер
TDS компрессии до сих пор не обучили вроде как.

можно попробовать пожать данные для передачи и на сервере распаковать
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Медленная запись в удаленный SQL сервер / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]