Udostępnij za pośrednictwem


Instrukcje: Zapytanie dotyczące wystąpień nietrwałych

Po utworzeniu nowego wystąpienia usługi i zdefiniowaniu zachowania magazynu wystąpień przepływu pracy SQL host usługi tworzy początkowy wpis dla tego wystąpienia usługi w magazynie wystąpień. Następnie, gdy wystąpienie usługi będzie utrwalane po raz pierwszy, zachowanie magazynu wystąpień przepływu pracy SQL przechowuje bieżący stan wystąpienia wraz z dodatkowymi danymi wymaganymi do aktywacji, odzyskiwania i kontroli.

Jeśli wystąpienie nie jest utrwalane po utworzeniu początkowego wpisu dla wystąpienia, wystąpienie usługi ma być w stanie nietrwałym. Wszystkie utrwalone wystąpienia usługi można wykonywać zapytania i kontrolować. Nietrwałe wystąpienia usługi nie mogą być ani odpytywane, ani kontrolowane. Jeśli wystąpienie nietrwałe jest zawieszone z powodu nieobsługiwanego wyjątku, może być odpytywane, ale nie jest kontrolowane.

Wystąpienia usługi trwałej, które nie są jeszcze utrwalone, pozostają w stanie nietrwałym w następujących scenariuszach:

  • Host usługi ulega awarii, zanim wystąpienie zostanie utrwalone po raz pierwszy. Początkowy wpis wystąpienia pozostaje w magazynie wystąpień. Wystąpienie nie jest możliwe do odzyskania. Jeśli zostanie wyświetlony skorelowany komunikat, wystąpienie stanie się ponownie aktywne.

  • Wystąpienie napotka nieobsługiwany wyjątek, zanim utrwali się po raz pierwszy. Pojawiają się następujące scenariusze

    • Jeśli wartość właściwości UnhandledExceptionAction jest ustawiona na Wartość Porzuć, informacje o wdrożeniu usługi są zapisywane w magazynie wystąpień, a wystąpienie jest zwalniane z pamięci. Wystąpienie pozostaje w stanie nietrwałym w bazie danych trwałości.

    • Jeśli wartość właściwości UnhandledExceptionAction jest ustawiona na Wartość AbandonAndSuspend, informacje o wdrożeniu usługi są zapisywane w bazie danych trwałości, a stan wystąpienia ma wartość Zawieszone. Nie można wznowić, anulować ani zakończyć wystąpienia. Host usługi nie może załadować wystąpienia, ponieważ wystąpienie nie zostało jeszcze utrwalone i dlatego wpis bazy danych dla wystąpienia nie został ukończony.

    • Jeśli wartość właściwości UnhandledExceptionAction jest ustawiona na Wartość Anuluj lub Zakończ, informacje o wdrożeniu usługi są zapisywane w magazynie wystąpień, a stan wystąpienia jest ustawiony na Ukończono.

W poniższych sekcjach przedstawiono przykładowe zapytania w celu znalezienia nietrwałych wystąpień w bazie danych trwałości SQL i usunięcia tych wystąpień z bazy danych.

Aby znaleźć wszystkie wystąpienia, które nie zostały jeszcze utrwalone

Następujące zapytanie SQL zwraca identyfikator i czas tworzenia dla wszystkich wystąpień, które nie są jeszcze utrwalane w bazie danych trwałości.

select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0;

Aby znaleźć wszystkie wystąpienia, które nie zostały jeszcze utrwalone, a także nie załadowane

Następujące zapytanie SQL zwraca identyfikator i czas tworzenia dla wszystkich wystąpień, które nie są utrwalane, a także nie są ładowane.

select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL;

Aby znaleźć wszystkie wstrzymane wystąpienia, które nie zostały jeszcze utrwalone

Następujące zapytanie SQL zwraca identyfikator, czas tworzenia, przyczynę zawieszenia i nazwę wyjątku zawieszenia dla wszystkich wystąpień, które nie są utrwalane, a także w stanie wstrzymania.

select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1;

Aby usunąć wystąpienia nietrwałe z bazy danych trwałości

Należy okresowo sprawdzać magazyn wystąpień dla wystąpień nietrwałych i usuwać wystąpienia z magazynu wystąpień, jeśli masz pewność, że wystąpienie nie otrzyma skorelowanego komunikatu. Jeśli na przykład wystąpienie znajduje się w bazie danych przez kilka miesięcy i wiesz, że przepływ pracy zwykle ma okres istnienia kilku dni, można bezpiecznie założyć, że jest to niezainicjowane wystąpienie, które uległo awarii.

Ogólnie rzecz biorąc, bezpieczne jest usunięcie nietrwałych wystąpień, które nie są zawieszone lub nie załadowane. Nie należy usuwać wszystkich nietrwałych wystąpień, ponieważ ten zestaw wystąpień zawiera właśnie utworzone wystąpienia, ale nie są jeszcze utrwalane. Należy usunąć tylko nietrwałe wystąpienia, które są pozostawione, ponieważ host usługi przepływu pracy, który załadował wystąpienie, spowodował wyjątek lub wystąpienie spowodowało wyjątek.

Ostrzeżenie

Usunięcie nietrwałych wystąpień z magazynu wystąpień zmniejsza rozmiar magazynu i może zwiększyć wydajność operacji magazynu.