2009-07-07 6 views
0

Есть ли способы определить, какие различия в базах данных влияют на производительность загрузки пакета SSIS?Отслеживание проблем с производительностью загрузки данных в пакете SSIS

У меня есть пакет, который загружает и выполняет различные биты обработки на ~ 100k записей на моей базе данных ноутбука в течение примерно 5 минут

Попробуйте тот же пакет и те же данные на тестовом сервере, который является разумным как в CPU, так и в памяти, и он все еще работает ... около 1 часа :-( Проверял пакет с небольшим набором данных, и он прошел через Ok

+0

Когда вы указываете пакет на своих серверах ... вы все еще используете пакет с вашего ноутбука в BI Studio? –

+0

Моя локальная настройка - это две виртуальные машины VMWare Workstation, одна с SQL Server, другая - моя машина Visual Studio с пакетом SSIS. В тестовой среде снова есть две виртуальные машины, опять одна с SQL, одна с пакетом, но размещенная на нашем кластере ESX. – SteveC

+0

Он просто становится более озадачивающим ... - поставьте пакет на ящик SQL-сервера, попробуйте запустить его с несколькими записями, загрузите штраф, дойдет до нескольких сотен, все еще ок, затем две тысячи ... остановится по задаче потока данных. Задача - выталкивать данные из представления в пару таблиц, один довольно прямой, другой с поиском и несколько дополнительных столбцов. Но на моем ноутбуке за 5 минут пробежал тестовый файл с гораздо большими файлами данных! – SteveC

ответ

0

CozyRoc над на MSDN forums указал мне в правильном направлении ...
- используется ВСС/Управление/Activity Monitor и пятнистый много СДЕЛКИ записей
- заставил меня думать, читать на разъеме Ole Db и бесконтрольно Стол блокировки
- WHAM ... данные загружаются штрафом :-)

По-прежнему не понимаю, почему он отлично работает на моем ноутбуке d/b и работает на тестовом сервере?
- Я был единственным человеком, использующим тест d/b, так что это не так, как если бы были какие-либо разногласия по поводу таблиц?

+1

Steve - Я уже несколько месяцев борюсь с проблемами производительности в SSIS. Несмотря на неубедительность, похоже, что SSIS не работает на серверах x64, как на 32-битных машинах. Пример использования 200-битной загрузки Oracle -> SQL, блога на MSDN и моих собственных выводов указывает на одно и то же ... OLE DB на x64 имеет некоторые недостатки в производительности. Запустите SSIS * на * сервере базы данных и посмотрите, как кричит сетевой ввод-вывод даже при использовании соединений с именованными каналами. – Mark

0

По моему опыту, самый большой коэффициент производительности в SSIS - Сетевая Latency. Пакет, выполняемый локально на сервере, работает намного быстрее, чем что-либо еще в сети. Кроме того, я не могу t по какой-либо причине, почему скорость будет резко отличаться. Запуск SQL Profiler за несколько минут может дать некоторые подсказки.

+0

. Интересно, что вы считаете, что задержка в сети является наибольшим хитом производительности ... тестовая среда - это два сервера, один с пакетом, один с SQL, так что это переходя через сеть ... может ли это иметь такой большой успех? – SteveC

1

Если вы исключили сетевую задержку, ваш наиболее вероятный виновник (с реальными объемами данных) будет вашей организацией трубопровода. В частности, какие преобразования вы делаете по трубопроводу.

преобразование данных в четырех вариантов:

  • потоковых (полностью в процессе/в памяти)
  • неблокирующих (но по-прежнему с помощью вывода, например, поиск, команд ввода/OLEDB)
  • полу-блокировки (блокирует трубопровод частично, но не полностью, например, слиянием)
  • блокировки (блоки трубопровода, пока он не полностью получен, например, сортировать, совокупный)

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

+0

Не могли бы вы объяснить, как исключить латентность сети, поскольку она для меня совершенно новая? – SteveC

3

У меня были подобные проблемы в течение последних нескольких недель, и вот несколько вещей, которые вы могли бы рассмотреть, перечисленные в порядке убывания важности в соответствии с тем, что сделал самое большое значение для нас:

  1. Дон 't предположим что-нибудь о сервере. Мы обнаружили, что RAID нашего производственного сервера был miscconfigured (HP продал нам диски с несоответствиями прошивки), а скорость записи на диск была буквально 50-й из того, что должно быть. Поэтому проверьте показатели сервера с помощью Perfmon.

  2. Убедитесь, что достаточное количество ОЗУ выделено SQL Server. Вставка больших наборов данных часто требует использования ОЗУ и TempDB для построения индексов и т. Д. Убедитесь, что у SQL достаточно ОЗУ, которое не требуется для замены на Pagefile.sys.

  3. В соответствии с святым Граалем SSIS избегайте манипулирования большими наборами данных с использованием операторов T-SQL. Все инструкции T-SQL вызывают изменение данных для записи в журнал транзакций , даже если вы используете Simple Recovery Model. Единственная разница между моделями Simple и Full Recovery заключается в том, что Simple автоматически обрезает файл журнала после каждой транзакции. Это означает, что большие массивы данных, когда манипулируют с T-SQL, разбивают файл журнала, убивая производительность.

  4. Для больших наборов данных данные сортируются по источнику, если это возможно. Компонент SSIS Sort дросселирует на достаточно больших наборах данных, и единственная жизнеспособная альтернатива (nSort от Ordinal, Inc.) стоит 900 долларов США за непередаваемую лицензию на процессор. Итак ... если вы абсолютно должны иметь большой набор данных, тогда подумайте о том, чтобы загрузить его в промежуточную базу данных в качестве промежуточного шага.

  5. Используйте назначение SQL Server, если вы знаете, что ваш пакет будет работать на целевом сервере, так как он предлагает прирост производительности примерно 15% по сравнению OLE DB, поскольку он разделяет память с SQL Server.

  6. Увеличьте размер сетевого пакета до 32767 в менеджерах соединений с базой данных. Это позволяет большим объемам данных быстрее перемещаться с исходного сервера/s и может заметно улучшать чтение на больших наборах данных.

  7. При использовании подстановок преобразования, эксперимента с кэшем не размеры - между использованием соединения кэша или режимом полного кэша для небольших наборов данных поиска, и частичного/No Cache для больших наборов данных. Это может освободить столь необходимую оперативную память.

  8. Если объединение нескольких больших наборов данных, использовать или RAW файлов или промежуточную базу данных для хранения ваших преобразованных наборов данных, а затем объединить и вставки всех данных таблицы в одной операции потока данных, а также заблокировать таблицу назначения. Использование промежуточных таблиц или RAW-файлов также может помочь в повторном конфликте блокировки таблиц.

  9. И последнее, но не менее важное: эксперимент с объектами DefaultBufferSize и DefaulBufferMaxRows. Вам нужно будет контролировать счетчик производительности буферов Buffer Buffer с помощью Perfmon.exe и настраивать размер буфера вверх, пока вы не увидите буферов, буферизованных (выгруженных на диск), а затем немного отбросьте.

Пункт 8 особенно важно на очень больших наборов данных, так как вы можете достичь только минимально вошли операции массовой вставки, если:

  • В таблице назначения пусто, и
  • таблица заблокирована на время действия нагрузки.
  • База данных находится в режиме «Просто/серийно зарегистрированный режим восстановления».

Это означает, что подчиненная массовая загрузка таблицы всегда будет полностью регистрироваться, поэтому вы хотите получить как можно больше данных в таблице при первой загрузке данных.

Наконец, если вы можете разбить таблицу назначения и затем параллельно загружать данные в каждый раздел, вы можете увеличить время загрузки в 2,5 раза быстрее, хотя это обычно не является возможным вариантом в дикой природе.

Смежные вопросы