V této odpovědi se pokusím poskytnout informace z oficiální dokumentace SSIS a zmíním své osobní zkušenosti s určením SQL Server.
1. Cíl SQL Server
Podle oficiální dokumentace SQL Server Destination:
Cíl SQL Server se připojuje k místní databázi SQL Server a hromadně načítá data do tabulek a zobrazení SQL Serveru. Cíl SQL Server nelze použít v balíčcích, které přistupují k databázi SQL Server na vzdáleném serveru. Místo toho by balíčky měly používat cíl OLE DB.
Cíl SQL Server nabízí stejné vysokorychlostní vkládání dat do SQL Server, které poskytuje úloha Hromadné vkládání; avšak pomocí cíle SQL Server může balíček použít transformace na data sloupců před načtením dat do SQL Server.
Pro načítání dat na SQL Server byste měli zvážit použití cíle SQL Server namísto cíle OLE DB
2. Cíl OLEDB
Podle oficiální dokumentace OLEDB Destination:
Cíl OLEDB – možnost rychlého načtení:Načtěte data do tabulky nebo zobrazení v cíli OLE DB a použijte možnost rychlého načtení, které jsou optimalizovány pro hromadné vkládání
3. Cíl OLEDB vs cíl SQL Server
Podle SQL Server Destination versus OLE DB Destination - MSDN topic:
Donald Farmer, bývalý skupinový programový manažer pro integrační služby, řekl, že můžete dosáhnout 5 až 10% zvýšení výkonu pomocí SQL Server Destination
.
Kromě toho s odkazem na následující příspěvek Matta Massona, specialisty na integraci dat ve společnosti Microsoft, kde odpověděl na následující otázku:
Mám použít cíl SQL Server?
Odpověď byla
Ne
...
Moje doporučení je, že pokud potřebujete každý kousek výkonu (10% nárůst výkonu při 10hodinovém zatížení může být významný), vyzkoušejte SQL Server Destination, abyste viděli, jak vám funguje. Mějte však na paměti následující omezení cíle SQL Server:
- Musíte mít SSIS spuštěný na stejném počítači jako cílová databáze
- Balík musíte spustit jako správce
- Je velmi obtížné ladit, když se něco pokazí
Vzhledem k těmto omezením doporučuji používat cíl OLE DB i když zaznamenáte zvýšení výkonu s cílem SQL Server.
3.1. Průvodce výkonem načítání dat
(Aktualizace dne 25. 3. 2019)
Při hledání osvědčených postupů SSIS jsem našel velmi užitečný článek společnosti Microsoft, který lze použít jako referenci:
- Průvodce výkonem načítání dat
V tomto článku provedli srovnání mezi všemi metodami načítání dat, včetně cíle SQL Server a cíle OLEDB, uvedli, že:
Cíl serveru SQL Cíl SQL Server je nejrychlejším způsobem hromadného načítání dat z toku dat Integration Services na SQL Server. Tento cíl podporuje všechny možnosti hromadného načtení serveru SQL Server – kromě ROWS_PER_BATCH.
Uvědomte si, že tento cíl vyžaduje připojení sdílené paměti k serveru SQL. To znamená, že jej lze použít pouze v případě, že Integration Services běží na stejném fyzickém počítači jako SQL Server.
Cíl OLE DB: Cíl OLE DB podporuje všechny možnosti hromadného načtení pro SQL Server. Pro podporu objednaného hromadného zatížení je však vyžadována nějaká další konfigurace. Další informace naleznete v části „Seřazená vstupní data“. Chcete-li použít hromadné API, musíte tento cíl nakonfigurovat pro „rychlé načítání“.
Cíl OLE DB může používat připojení TCP/IP i pojmenované kanály k serveru SQL Server. To znamená, že cíl OLE DB, na rozdíl od cíle SQL Server, lze spustit na jiném počítači, než je cíl hromadného načtení. Protože balíčky Integration Services, které používají cíl OLE DB, nemusejí běžet na samotném počítači SQL Server, můžete tok ETL škálovat pomocí serverů workhorse.
3.2. Osobní zkušenost
(Aktualizace dne 25. 3. 2019)
Vzhledem k tomu, že tuto otázku používá mnoho lidí jako referenci, a poté, co jsem byl v této doméně zkušenější, přidal jsem tuto část, abych zmínil své osobní zkušenosti s používáním cíle SQL Server.
Zatímco oficiální dokumentace zmiňovala, že cíl SQL Server zvýší výkon, nedoporučuji tyto komponenty vůbec používat z mnoha důvodů:
- Vyžaduje, aby cílový server a ETL server byly stejné (funguje pouze s lokálním SQL serverem)
- Vždy vyvolá výjimky, které nemají žádný význam
- Po testování na obrovském objemu dat je rozdíl ve výkonu oproti cíli OLEDB zanedbatelný (testováno na přibližně 500 GB dat načtených po částech a časový rozdíl je menší než jedna minuta)
Můžete se také podívat na následující příspěvek (od @billinkc) Chcete-li získat další informace o tomto tématu:
- Měly by být balíčky SSIS a databáze SQL na stejném serveru?
4. Závěr
Na základě článků společnosti Microsoft můžete říci, že SQL Server Destination
zvýšit výkon vkládání dat (využívá BULK insert) , ale je určen pro konkrétní případ, kterým je Lokální SQL server. OLEDB Destination
je obecnější a doporučuje se v ostatních případech a pomocí Fast Load
režim přístupu k datům (který používá také HROMADNÉ vkládání) na OLE DB destination
zvýší to výkon při zatížení dat.
Na druhou stranu, na základě mých zkušeností a z mnoha článků napsaných odborníky SSIS nedoporučuje se vůbec používat SQL Server Destination protože není stabilní a často vyvolává výjimku a výkon lze považovat za zanedbatelný.
Další informace
Nedávno jsem na toto téma publikoval podrobný článek. Můžete to zkontrolovat na:
- Cíl SSIS OLE DB vs cíl SQL Server