SSIS IServerExec vs MsDtsSrvr

SSIS IServerExec vs MsDtsSrvr

We wcześniejszym poście (https://pl.seequality.net/ssis-execution-process-iserverexec/) omówiliśmy architekturę Integration Services oraz proces “IServerExec”. W tym poście przypomnimy sobie co to jest usługa SSIS Service (MsDtsSrvr) oraz czy rzeczywiście potrzebujemy zarówno tej usługi, jak i wcześniej opisanego procesu.

Usługa SSIS

Zgodnie ze schematem z wcześniejszego postu usługa SSIS Service jest jedną ze składowych Integration Services.

 

SSIS Architecture
SSIS Architecture

Usługa ta wykorzystywana była przed SQL Server 2012 wraz z “Package Deployment Model”. Pakiety można było przechowywać albo w bazie danych MSDB, albo w systemie plików, a usługa ta była właśnie wykorzystywana do uruchamiania oraz zarządzania tymi pakietami. Tak naprawdę jest to starszy brat SSIS Catalogu i w uproszczeniu można powiedzieć, że funkcje obu są niemalże identyczne.Usługa ta instalowana jest wówczas, gdy podczas instalacji SQL Server wybierzemy odpowiednią opcję – Shared Features -> Integration Services. Pojawia się jednak pytanie czy w przypadku, gdy korzystamy z “Project Deployment Model” ta usługa jest potrzebna?

Test

W celu sprawdzenia można przeprowadzić następujący eksperyment:

  • Zatrzymaj usługę SSIS
  • Uruchom skrypt do monitorowania usługi SSIS, który pozwoli sprawdzić, czy usługa jest uruchomiona oraz ewentualnie w którym dokładnie momencie startuje/jest zatrzymywana
Clear-Host

$ServiceName = 'MsDtsServer130'

while ($true)
{
    Start-Sleep -Milliseconds 500
    $arrService = Get-Service -Name $ServiceName
    $arrService.status
}
Run the package from Agent as a step
  • Uruchom dowolny pakiet wykorzystując Management Studio oraz skrypt, który można wygenerować z poziomu SSIS Catalogu, i sprawdź czy usługa została uruchomiona, czy nie.
    W tym przypadku pakiet wykona się poprawnie i usługa SSIS nie zostanie uruchomiona.
  • Jeżeli usługa została uruchomiona, zatrzymaj usługę. Uruchom dowolny pakiet wykorzystując SQL Server Agent. Przygotuj “Job” oraz go uruchom i sprawdź, czy usługa została uruchomiona.
    W tym przypadku pakiet również wykona się poprawnie, natomiast usługa SSIS zostanie uruchomiona!
  • Zatrzymaj usługę. Skopiuj komendę używana przez SQL Server Agent i uruchom ją z poziomu CMD oraz sprawdź czy usługa została uruchomiona czy nie.
    W tym przypadku pakiet również wykona się poprawnie, natomiast usługa SSIS nie zostanie uruchomiona!
  • Przejdź do usług oraz zmień status usługi na “Disabled” oraz ponów testy dla wszystkich przypadków
    W tym przypadku pakiet również wykona się poprawnie we wszystkich wariantach!

Cały test, nagrany za pomocą “Steps Recorder” dostępny jest tutaj: ssis_service_check (wydruk PDF 14MB)

Wnioski

Czy możemy zatem powiedzieć, że usługa jest nam zupełnie niepotrzebna i nie trzeba nawet instalować SQL Server Integration Services? Odpowiedź oczywiście nie jest prosta… Ponieważ fizycznie usługa nie jest potrzebna do uruchamiania pakietów, na pewno nie ma potrzeby, aby była ona uruchomiona. Czy możemy natomiast zrezygnować z instalacji SQL Server Integration Services? Niestety nie. Powód nie jest do końca jasny. Jedyny powód, jaki udało mi się ustalić, w tym temacie to kwestia DTEXEC. Narzędzie to instalowane jest wraz z instalacja SSIS. Co prawda nawet bez jego instalacji możemy zauważyć, że DTEXEC jest zainstalowany i używany podczas wykorzystywania np. “Data Import/Export Wizard”. Okazuje się jednak, że nie jest to pełna wersja tego narzędzia i właśnie ta pełna wersja instalowana jest w chwili instalacji SQL Server Integration Services. Rozwiązaniem mogłoby być przeniesienie pliku wykonywalnego z innej maszyny, na której usługa jest zainstalowana, natomiast na pewno nie jest to rozwiązanie wspierane przez Microsoft i według niektórych źródeł może naruszyć pewne warunki licencyjne. Realnym przykładem produkcyjnym będzie instalacja Integration Services, a następnie zmiana statusu tej usługi na “Disabled”. Oczywiście tylko wówczas, gdy nie w bazie danych msdb nie przytrzymywane są żadne pakiety. Wyłączenie usługi pozwoli nam nadal uruchamiać pakiety tak jak poprzednio, natomiast pozwoli nam również wyłączyć nieużywane usługi na serwerze produkcyjnym co powinno być rzeczą przez nas pożadaną.

Więcej o Integration Services Catalog oraz bazie danych SSISDB mówiłem podczas sesji “SSISDB i SSIS catalog od środka”. Podczas prezentacji pokazywałem również opisany wyżej test. Szczegóły oraz link do nagrania dostępny tutaj: https://pl.seequality.net/ssisdb-ssis-catalog-od-srodka-nagranie/

 

Slawomir Drzymala
Follow me on

Leave a Reply