SQL Parallelism, paralelní zpracování dat – 2 a více procedur současně?

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.

1) Vytvořme si tyto 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'

2) 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

3) Z SSIS Toolboxu (nalevo) přetáhneme do prostřední oblasti “Execute SQL Task”, 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

4) 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

5) 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

6) 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

7) 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

_______________________________________________________________________________________________
Intelligent technologies - podniková řešení a školení
SQL Parallelism, paralelní zpracování dat – 2 a více procedur současně?
5 (100%) 2 votes

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.