SQL Server 2016 přináší nově paralelní vykonání INSERT…SELECT kombinace, které za určitých okolností představuje výrazné (10x a více) zlepšení výkonu pro některé typické ETL scénáře. Aby mohl být použit paralelní operátor, musí být splněny především dvě podmínky:
- level kompatibily databáze musí být nastaven na 130 a
- je nutné použít TABLOCK hint pro cílovou tabulku.
Zda byl skutečně použit paralelní operátor zjistíme jednoduše z exekučního plánu.
Bohužel jako obvykle existuje několik výrazných omezení, která nám prvotní radost mohou zkazit. Paralelní exekuce se nedočkáme pokud:
- při insertu do row store cílová tabulka obsahuje clusterovaný nebo alespoň jeden neclusterovaný index
- tabulka má IDENTITY sloupec nebo využívá sekvence
Zvláštní pravidla platí v případě, využíváme-li jako cíl (INSERT) nebo zdroj (SELECT) column store úložiště.
Detaily:
- https://blogs.msdn.microsoft.com/sqlcat/2016/07/06/sqlsweet16-episode-3-parallel-insert-select/
- https://blogs.msdn.microsoft.com/sqlcat/2016/07/21/real-world-parallel-insert-what-else-you-need-to-know/
Poznámka:
Nezaměňovat INSERT…INTO se SELECT…INTO, který podporuje paralelní exekuční plány již od SQL Serveru 2014 (compatibility 110 a vyšší).