У меня были подобные проблемы в течение последних нескольких недель, и вот несколько вещей, которые вы могли бы рассмотреть, перечисленные в порядке убывания важности в соответствии с тем, что сделал самое большое значение для нас:
Дон 't предположим что-нибудь о сервере. Мы обнаружили, что RAID нашего производственного сервера был miscconfigured (HP продал нам диски с несоответствиями прошивки), а скорость записи на диск была буквально 50-й из того, что должно быть. Поэтому проверьте показатели сервера с помощью Perfmon.
Убедитесь, что достаточное количество ОЗУ выделено SQL Server. Вставка больших наборов данных часто требует использования ОЗУ и TempDB для построения индексов и т. Д. Убедитесь, что у SQL достаточно ОЗУ, которое не требуется для замены на Pagefile.sys.
В соответствии с святым Граалем SSIS избегайте манипулирования большими наборами данных с использованием операторов T-SQL. Все инструкции T-SQL вызывают изменение данных для записи в журнал транзакций , даже если вы используете Simple Recovery Model. Единственная разница между моделями Simple и Full Recovery заключается в том, что Simple автоматически обрезает файл журнала после каждой транзакции. Это означает, что большие массивы данных, когда манипулируют с T-SQL, разбивают файл журнала, убивая производительность.
Для больших наборов данных данные сортируются по источнику, если это возможно. Компонент SSIS Sort дросселирует на достаточно больших наборах данных, и единственная жизнеспособная альтернатива (nSort от Ordinal, Inc.) стоит 900 долларов США за непередаваемую лицензию на процессор. Итак ... если вы абсолютно должны иметь большой набор данных, тогда подумайте о том, чтобы загрузить его в промежуточную базу данных в качестве промежуточного шага.
Используйте назначение SQL Server, если вы знаете, что ваш пакет будет работать на целевом сервере, так как он предлагает прирост производительности примерно 15% по сравнению OLE DB, поскольку он разделяет память с SQL Server.
Увеличьте размер сетевого пакета до 32767 в менеджерах соединений с базой данных. Это позволяет большим объемам данных быстрее перемещаться с исходного сервера/s и может заметно улучшать чтение на больших наборах данных.
При использовании подстановок преобразования, эксперимента с кэшем не размеры - между использованием соединения кэша или режимом полного кэша для небольших наборов данных поиска, и частичного/No Cache для больших наборов данных. Это может освободить столь необходимую оперативную память.
Если объединение нескольких больших наборов данных, использовать или RAW файлов или промежуточную базу данных для хранения ваших преобразованных наборов данных, а затем объединить и вставки всех данных таблицы в одной операции потока данных, а также заблокировать таблицу назначения. Использование промежуточных таблиц или RAW-файлов также может помочь в повторном конфликте блокировки таблиц.
И последнее, но не менее важное: эксперимент с объектами DefaultBufferSize и DefaulBufferMaxRows. Вам нужно будет контролировать счетчик производительности буферов Buffer Buffer с помощью Perfmon.exe и настраивать размер буфера вверх, пока вы не увидите буферов, буферизованных (выгруженных на диск), а затем немного отбросьте.
Пункт 8 особенно важно на очень больших наборов данных, так как вы можете достичь только минимально вошли операции массовой вставки, если:
- В таблице назначения пусто, и
- таблица заблокирована на время действия нагрузки.
- База данных находится в режиме «Просто/серийно зарегистрированный режим восстановления».
Это означает, что подчиненная массовая загрузка таблицы всегда будет полностью регистрироваться, поэтому вы хотите получить как можно больше данных в таблице при первой загрузке данных.
Наконец, если вы можете разбить таблицу назначения и затем параллельно загружать данные в каждый раздел, вы можете увеличить время загрузки в 2,5 раза быстрее, хотя это обычно не является возможным вариантом в дикой природе.
Когда вы указываете пакет на своих серверах ... вы все еще используете пакет с вашего ноутбука в BI Studio? –
Моя локальная настройка - это две виртуальные машины VMWare Workstation, одна с SQL Server, другая - моя машина Visual Studio с пакетом SSIS. В тестовой среде снова есть две виртуальные машины, опять одна с SQL, одна с пакетом, но размещенная на нашем кластере ESX. – SteveC
Он просто становится более озадачивающим ... - поставьте пакет на ящик SQL-сервера, попробуйте запустить его с несколькими записями, загрузите штраф, дойдет до нескольких сотен, все еще ок, затем две тысячи ... остановится по задаче потока данных. Задача - выталкивать данные из представления в пару таблиц, один довольно прямой, другой с поиском и несколько дополнительных столбцов. Но на моем ноутбуке за 5 минут пробежал тестовый файл с гораздо большими файлами данных! – SteveC