Postupy: Dotaz na netrvalé instance
Když je vytvořena nová instance služby a služba má definované chování úložiště instancí pracovního postupu SQL, hostitel služby vytvoří počáteční položku pro tuto instanci služby v úložišti instancí. Když instance služby potrvá poprvé, uloží chování úložiště instancí pracovního postupu SQL aktuální stav instance spolu s dalšími daty, která jsou nutná k aktivaci, obnovení a řízení.
Pokud se instance po vytvoření počáteční položky instance neuchová, znamená to, že instance služby je v neudržované stavu. Všechny trvalé instance služby je možné dotazovat a řídit. Instance služby, které nejsou trvalé, se nedají dotazovat ani řídit. Pokud není trvalá instance pozastavena kvůli neošetřené výjimce, může být dotazována, ale neřídí se.
Trvalé instance služby, které ještě nejsou trvalé, zůstávají v neudržované stavu v následujících scénářích:
Hostitel služby se chybově ukončí před tím, než instance potrvá poprvé. Počáteční položka instance zůstane v úložišti instancí. Instance není obnovitelná. Pokud dorazí korelovaná zpráva, instance se znovu aktivuje.
Instance zaznamená neošetřenou výjimku, než se poprvé zachová. Vznikají následující scénáře:
Pokud je hodnota UnhandledExceptionAction vlastnost nastavena na Abandon, informace o nasazení služby jsou zapsány do úložiště instancí a instance je uvolněna z paměti. Instance zůstává v databázi trvalosti v nezachovaném stavu.
Pokud je hodnota UnhandledExceptionAction vlastnost nastavena na AbandonAndSuspend, informace o nasazení služby se zapisují do databáze trvalosti a stav instance je nastaven na Pozastaveno. Instanci nelze obnovit, zrušit ani ukončit. Hostitel služby nemůže načíst instanci, protože instance ještě nebyla zachována, a proto není položka databáze instance dokončena.
Pokud je hodnota UnhandledExceptionAction vlastnost nastavena na Cancel nebo Terminate, informace o nasazení služby jsou zapsány do úložiště instancí a stav instance je nastaven na Dokončeno.
Následující části obsahují ukázkové dotazy pro vyhledání nezachovaných instancí v databázi trvalosti SQL a odstranění těchto instancí z databáze.
Vyhledání všech instancí, které ještě nejsou trvalé
Následující dotaz SQL vrátí ID a čas vytvoření pro všechny instance, které ještě nejsou trvalé v databázi trvalosti.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0;
Vyhledání všech instancí, které ještě nejsou trvalé a také nenačtené
Následující dotaz SQL vrátí ID a čas vytvoření pro všechny instance, které nejsou trvalé a také nejsou načteny.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL;
Vyhledání všech pozastavených instancí, které ještě nebyly zachovány
Následující dotaz SQL vrátí ID, čas vytvoření, důvod pozastavení a název výjimky pozastavení pro všechny instance, které nejsou trvalé a také v pozastaveném stavu.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1;
Odstranění nezachovaných instancí z databáze trvalosti
Pokud jste si jisti, že instance neobdrží korelovanou zprávu, měli byste pravidelně kontrolovat úložiště instancí pro nezachované instance a odebírat instance z úložiště instancí. Pokud je například instance v databázi několik měsíců a víte, že pracovní postup obvykle trvá několik dní, je bezpečné předpokládat, že se jedná o neinicializovanou instanci, která se chybově ukončila.
Obecně platí, že je bezpečné odstranit neuchované instance, které nejsou pozastavené nebo nenačtené. Neměli byste odstranit všechny neuchované instance, protože tato sada instancí obsahuje právě vytvořené instance, ale ještě nejsou trvalé. Měli byste odstranit pouze neuchované instance, které zůstaly, protože hostitel služby pracovního postupu, který měl načtenou instanci, způsobil výjimku nebo samotná instance způsobila výjimku.
Upozorňující
Odstranění neuchovaných instancí z úložiště instancí zmenší velikost úložiště a může zlepšit výkon operací úložiště.