2017-02-03 19 views
0

У меня есть пакет SSIS, который перемещает данные с SQL-сервера в базу данных Postgres 9.5. Я использую последние драйверы Postgres ODBC для подключения к серверу postgres. Основная часть операций - это вставки, обновления и обновления. Когда я запускаю этот пакет с моей машины разработки (Win 10 64-bit) в Visual Studio 2012, это довольно быстро. Он может передавать около 80 тыс. Строк за 40 секунд.SSIS пакет работает медленно на сервере, но отлично работает на dev машине

Когда я разворачиваю его на сервере (экземпляр SQL Server 2012) и запускаю его с помощью студии управления SQL, она выполняется очень медленно. Потребовалось около 20 секунд, чтобы передать менее 10 строк и навсегда работать над полным набором данных. Я никогда не позволяю финишу, потому что это занимает слишком много времени.

Как моя машина для разработки, так и сервер имеют тот же самый драйвер postgres и идентично настроенные источники ODBC.

Редактировать: Я также должен отметить, что у меня есть другие пакеты, развернутые на этом сервере, которые работают нормально, хотя эти пакеты не касаются postgres или не используют ODBC для чего-либо.

+0

Используете ли вы те же базы данных из локального и серверного? если нет, возможно, сервер занят или таблица на сервере огромна, но таблица разработки крошечная. – FLICKER

+0

Является ли это той же таблицей в postgres, с которой вы работаете, с вашего локального и на сервере? Не могли бы вы представить изображение потока данных, который работает медленно? –

+0

Проверьте наличие ODBC и/или трассировку/протоколирование драйверов. – TallTed

ответ

0

Если все остальное равно:

  • Те же водители
  • Те же конфигурации - ODBC (т.е. SSL, те же коробки тикали), пакет параметров
  • Те же таблицы - с таким же количеством данных в них и индексы
  • же бит-Несс (64x)

Я бы смотреть в сторону различия в ресурсах. То есть

  • - это то же самое. Предполагая, что это записывается в ту же базу данных (и файлы), тогда это не должно быть проблемой.
  • Память - это ограничение, связанное с экземпляром dev? Если поток данных имеет большие буферы, это может действительно замедлить работу.
  • ЦП - это более эффективный сервер, чем ваша машина-разработчик
  • Сеть - это сервер-разработчик, расположенный в другой подсети с различным QoS. Я предполагаю, что это не проблема, поскольку другие пакеты не затронуты. Если при подключении к Postgres нет ничего странного.

Другим способом, связанным с проблемой, является запуск различных версий пакета, удаление частей потока данных. то есть удалить пункт odbc/ado.net и запустить пакет. Если он заканчивается быстро, вы знаете, что проблема там. Если он все еще медленный, продолжайте движение вверх по течению, пока вы не определите медленный компонент.

Наконец, я бы рассмотрел использование psql над odbc. psql - это утилита postgres, такая как bcp SQL, которая позволит вам массово копировать данные в postgres. Драйвер odbc допускает только вставки строки за строкой, которые имеют тенденцию быть вялыми. Запись данных в файл с разделителями табуляции, а затем использование psql для массового копирования данных в postgres на самом деле значительно быстрее (строки из 80 тысяч могут занять 5 секунд).