Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
Имеется у меня вполне рабочая модель данных, которая отлично работает при ручном вводе пользователем. Но попробовал я провести экспорт из Акцеса через эту модель и обнаружил крайне неприятный баг. С увеличением количества данных в базе на сервере, катастрофически падает скорость импорта. Весь ввод данных в БД у меня реализован через хранимки которые я уже только-что не вылизал для оптимизации и не могу понять в чем причина такого зверского замедления работы. Для примера, исходная база содержащая 50 тыс строк, разносится на 300 тыс. разных объектов в базе и все это длится почти сутки! Это же просто пипец какой-то. Сейчас гоняю разные варианты с первой тысячей строк из исходной БД. Пока нет существенного прорыва в скорости.
Пробовал подключать через натив клиента и через адо, принципиальной разницы в скорости импорта не заметил, но вот то что установка свойства CursorLocation в ServerLocation дало не прирост скорости, а очень существенное замедление - стало неожиданным.
В общем жду хоть каких-то идей, куда копать еще.
Система Win10 на i7 c 8 Гб памяти. MS SQL 2017. При всех тестах загрузка памяти не превышает 55%
28 авг 18, 12:36    [21656005]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 184
Копать в сторону плана запросов.
28 авг 18, 12:42    [21656014]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45713

Страдалецъ
Весь ввод данных в БД у меня реализован через хранимки

Страдалецъ
установка свойства CursorLocation в ServerLocation

Ты сам себе противоречишь. Хранимки, конечно, могут порождать курсоры, но не те, которые
вводят данные и "вылизаны".

Posted via ActualForum NNTP Server 1.5

28 авг 18, 12:49    [21656022]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6224
Страдалецъ,

попробуйте весь импорт разбить на крупные транзакции (или всё в одну): Begin Transaction .... Commit
28 авг 18, 12:50    [21656025]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 13866
План исполнения - в студию.
28 авг 18, 13:06    [21656050]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
Кроик Семён,
Возможно вы и правы. Действительно, попробую делать порционные, скажем по 10 пачек объектов в одну транзакцию. Сейчас я вообще без явных указаний транзакций пытаюсь лить в базу.
28 авг 18, 13:29    [21656102]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
О да! Как же я раньше то не догадался о транзакциях. После разбиения на порции все стало существенно лучше заливаться.
28 авг 18, 13:43    [21656161]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Котовасия
Member

Откуда:
Сообщений: 350
Страдалецъ
О да! Как же я раньше то не догадался о транзакциях. После разбиения на порции все стало существенно лучше заливаться.

MS SQL щики... (:.
28 авг 18, 14:05    [21656210]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
энди
Member

Откуда: Киров, Россия
Сообщений: 892
Переложите проблему импорта на сам SQL сервер, bcp например или скажем IRowsetFastLoad поддержка которого есть в sdac у девартов.
28 авг 18, 14:29    [21656262]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 184
Страдалецъ
...После разбиения на порции все стало существенно лучше заливаться.

Так до плана запросов и не дошло. Видно в следующий раз :)
28 авг 18, 14:55    [21656319]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
План - это сильно сказано. Все хранимки выполнены по одному шаблону простой селект и такой-же простой инсерт, но в процессе импорта на каждый пакет данных приходится в среднем по 2 десятка вызовов хранимок.
28 авг 18, 17:16    [21656652]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45713

Страдалецъ
Все хранимки выполнены по одному шаблону простой селект и такой-же простой инсерт

А select-то там зачем?

И ты не поверишь, но у этого "простого select" тоже есть план и он не всегда такой, как ты
думаешь.

Posted via ActualForum NNTP Server 1.5

28 авг 18, 18:08    [21656732]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
L_argo
Member

Откуда:
Сообщений: 298
Зачитать импорт в спец. таблицу и уже потом разобрать ее сложными процедурами.
Может выйти заметно быстрее.
29 авг 18, 09:20    [21657131]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
Нашел я в чем у меня была основная проблема замедления. Все оказалось до смешного просто - для обновления датасета в приложении используется Requery, но при импорте я отключаю с помощью флага эту инструкцию. Оказалось, что в одном месте я этот флаг не поставил и в итоге, чем больше данных в БД, тем длительнее Requery, но тем не менее подсказка с транзакциями была удачна и значит не зря тему завел. Всем спасибо.
31 авг 18, 11:55    [21659977]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 184
Страдалецъ,
Вот же ж блин, а я думал всю диагностику в Profiler сделали, а оно вон оно как.
3 сен 18, 12:46    [21662527]     Ответить | Цитировать Сообщить модератору
 Re: Проблема скорости экспорта в MSSQL средствами Delphi  [new]
Страдалецъ
Member

Откуда: Мурманск
Сообщений: 1322
А я и сделал, а когда обнаружил, что сумма всех вызовов хранимок за один проход цикла, даже отдаленно не совпадает с итогом по циклу, наконец то и обнаружил слона. :)
5 сен 18, 20:35    [21666249]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить