Spuštění více než 1 procedury v 1 čas nemusí být tak jednoduchá úloha jak se zdá, zejména pokud jednotlivé procedury mají mezi sebou závislosti – tzn nějaká sada procedur podmiňuje spuštění jiných procedur. Jak tedy udělat paralelismus (Parallelism)? Když si zrekapitulujeme možnosti které se nám nabízejí:

  • Parallelism procedur v jedné session v SQL skriptu – Nejde
  • Parallelism procedur v rámci stepů 1 Jobu – Nejde
  • Parallelism procedur přes více jobů – Lze, ale nekontrolujeme závislosti

Napadá někoho ještě něco dalšího? Mě už jen SSIS package (SQL Server Integration Services).

Paralelismus (parallelism) a paralelní zpracování dat – spuštění více SQL procedur a skriptů současně s kontrolou závislostí přes SSIS

Spuštění více transakcí v 1 čas není až takový problém (viz. předchozí shrnutí). Můžeme založit více jobů, které budou mít schedule nastavený na stejný čas. Tato varianta je vhodná pro případ, kdy mezi procedurami nebo SQL skripty nemáme žádné závislosti. V případě, že závislosti máme, tak je vhodné použít buď nějaký externí nástroj nebo využít integrovaný nástroj SSIS (SQL Server Integration Services). Jak na to?

Zadání příkladu: Mějme 4 procedury (A,B,C,D) z nichž každá běží jinou dobu. Procedury A,B,C jsou na sobě nezávislé a je možné je pustit paralelně. Procedura D musí počkat na to, až všechny ostatní procedury úspěšně doběhnou a teprve až potom ji můžeme spustit.

Vytvořme si testovací procedury

  • Procedure_A poběží 1 vteřinu
  • Procedure_B poběží 20 vteřin
  • Procedure_C poběží 40 vteřin
  • Až po doběhnutí všech procedur pouštíme Procedure_D

CREATE PROCEDURE Procedure_A
AS
--Procedura běží 1 vteřinu
WAITFOR DELAY '0:00:01'
Print 'End of Procedure_A'

GO

CREATE PROCEDURE Procedure_B
AS

--Procedura běží 20 vteřin
WAITFOR DELAY '0:00:20'
Print 'End of Procedure_B'

GO

CREATE PROCEDURE Procedure_C
AS

--Procedura běží 40 vteřin
WAITFOR DELAY '0:00:40'
Print 'End of Procedure_C'

GO

CREATE PROCEDURE Procedure_D
AS

Print 'End of Procedure_D'

Založíme si prázdného  SSIS projektu a package (balíčku)

Projekt je vytvořen v Visual studio (SSDT) 2017, ale lze založit v libovolné verzi SQL Server data tools.

Parallelism - založení projektu a package - ukázka

Z SSIS Toolboxu (nalevo) přetáhneme do prostřední oblasti “Execute SQL Task”

A to vše pro každou zprocedur, to znamená 4x. Text každého taxku přejmenujeme na název procedury a šipky z procedur A,B,C vedeme do procedury D.

Parallelism - vytvoření Execute SQL Task pro každou z procedur A,B,C,D - ukázka

Na Execute SQL tasky musíme navázat naše procedury

Nejdříve si musíme založit Connection managera na náš SQL server (viz. obrázek).  Klikneme pravým tlačítkem do oblasti Connection managers – new OLE DB connection – Vyplníme název SQL Server instance a název databáze – následně potvrdíme OK

SSIS Parallelism - vytvoření SSIS connection manageru - ukázka

Provedeme nastavení prvního Execute SQL Tasku (Procedure_A)

  • Poklikáme na task
  • V okně nastavíme náš connection manager
  • V sekci SQK statement klikneme na tři tečky
  • Do dalšího okna vyplníme EXEC Procedure_A

Tímto je nastavení hotové a podobně postupujeme pro všechny ostatní tasky

Parallelism - nastavení Execute SQL task na proceduru A - ukázka

Po nastavení všech tasků z předchozího kroku by vám měly zmiznout křížky

To znamená, že tasky jsou validní = funguje connection manager a SQL skripty jsou validní. SSIS package je připraven. Můžeme vyzkoušet, jestli paralelní zpracování dat funguje

Parallelism - stav po nastavení Execute SQL task pro všechny procedury - ukázka

Finální otestování paralelního zpracování dat

Spustíme task a pozorujeme co se děje. Vidíme, že procedury A,B,C se spustili v 1 moment a procedura D čeká, než doběhne poslední z procedur A,B,C (viz obrázky).

Parallelism - Testování paralelního zpracování procedur - ukázka

Parallelism - Testování paralelního zpracování procedur, doběhnutí SSIS package - ukázka

5/5 - (5 votes)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *