Sql server: скорочуємо час завантаження сховища даних. Частина i

Відео: Сховища даних

SQL Server: скорочуємо час завантаження сховища даних. частина I
Підвищуємо продуктивність - зміна пакета SSIS
Щоб збільшити продуктивність, я зробив спробу оптимізувати пакет SSIS. На тестах з невеликим підмножиною даних (1000 рядків даних) пакет в його первісному стані був виконаний за 3,5 хвилини. Наказавши завданню DataFlow використовувати не OLE DB Destination, a SQL Destination, я скоротив час виконання пакета до 1,5 хвилин. Потім я розглянув різні методи паралельного виконання пакету SS1S. Я змінив пакет для одночасної обробки різних пакетів файлів (у вигляді декількох завдань DataFlow), створив головний пакет для паралельного виконання базових пакетів (див. Скріншот нижче) і перевірив деякі комбінації їх взаємодії. На жаль, мені не вдалося домогтися підвищення продуктивності. На моєму комп`ютері не помічено перевантаження процесора, пам`яті або диска, але пропускна здатність SSIS зменшилася пропорційно числу одночасно оброблюваних файлів.

SQL Server: скорочуємо час завантаження сховища даних. частина I
Паралельне виконання базових пакетів

Однак я не сумнівався, що існує можливість поліпшити паралельну обробку SSIS, тому вирішив розглянути альтернативні способи завантаження файлів.




Команда BULK INSERT
Команда BULK INSERT з`явилася у версії SQL Server 7.0 і використовується для завантаження даних з файлу в таблицю або уявлення. Вона не настільки гнучка, як пакет SSIS, але досить добре піддається налаштуванню і забезпечує можливість завантаження як з локальних, так і з віддалених файлів в декількох форматах. За допомогою аргументів BULK INSERT можна керувати розміром транзакції, перенаправляти помилки (і вказувати максимально дозволене число помилок), а також змінювати блокування поведінки і умови спрацьовування тригера для таблиці.




SQL Server: скорочуємо час завантаження сховища даних. частина I
Сценарій T-SQL Script з командою BULK INSERT

Як показано в вище, я підготував сценарій T-SQL з курсором для захоплення шляху до файлу для кожної послідовності (зверніть увагу, що в пакеті SSIS виконувалася ітерація по шляхах до файлів через циклічну завдання ForEach). Усередині курсора я викликав команду BULK INSERT для завантаження кожної послідовності в проміжні табліци- після завершення курсора я виконував збережену процедуру ([dbo]. [Spl_SeriesValue]) для об`єднання проміжних результатів з таблицею призначення.

При першому запуску цього сценарію в середовищі Management Studio мені здалося, що нічого не сталося. Я був в розгубленості: протягом декількох секунд у вікні результатів запиту виднілася порожня сітка. Потім, як ніби прокинувшись, SQL Server почав гарячково видавати дані. Я не повірив своїм очам і запустив сценарій повторно. Вдруге результат був отриманий навіть трохи швидше - через 5 секунд! Це було рішення, за допомогою якого всю послідовність можна було потенційно перезавантажити за 25 хвилин. Однак після тестування з великим числом рядів з`ясувалося, що масштабування сценарію відбувалося нелінійно (наприклад, час обробки 5-тисячним послідовності склало близько 32 секунд-зменшення продуктивності приблизно на 20%). Однак мені ще хотілося з`ясувати, чи можна виключити деякий число операцій записи в файли даних або журналу, пов`язаних з використанням проміжних таблиць.


Чи плануєте зайнятися вивченням всіх тонкощів настройки SQL Server відразу ж після того, як закінчите робити капітальний ремонт у своєму домі? Що ж, в цьому випадку можу порекомендувати вам заглянути на capital-parket.ru/catalog/wood/tarkett/tango/ (https://capital-parket.ru/catalog/wood/tarkett/tango/). Тут ви зможете придбати придбати висококласний паркет, який стане прикрасою будь-якого інтер`єру.

ІНШЕ

» » Sql server: скорочуємо час завантаження сховища даних. Частина i