Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Когда новый экземпляр службы создан и для службы определено поведение хранилища экземпляров рабочих процессов SQL, узел службы создает начальную запись для экземпляра службы в хранилище экземпляров. Позднее, когда экземпляр службы материализуется в первый раз, поведение хранилища экземпляров рабочих процессов SQL сохраняет текущее состояние экземпляра вместе с дополнительными данными, необходимыми для его активации, восстановления и управления.
Если экземпляр не материализован после создания начальной записи для экземпляра, считается, что экземпляр службы находится в нематериализованном состоянии. Ко всем материализованным экземплярам службы можно выполнять запросы и управлять ими. К нематериализованным экземплярам службы нельзя выполнять запросы, управление ими также невозможно. Если нематериализованный экземпляр приостановлен из-за необработанного исключения, к нему можно выполнять запросы, но им нельзя управлять.
Экземпляры устойчивой службы, которые еще не материализованы, остаются в нематериализованном состоянии в следующих ситуациях.
Сбой узла службы происходит до первой материализации экземпляра. Начальная запись для экземпляра остается в хранилище экземпляров. Экземпляр не может быть восстановлен. Если поступает коррелированное сообщение, экземпляр вновь становится активным.
Необработанное исключение для экземпляра происходит до первой материализации экземпляра. Возникают следующие ситуации.
Если для свойства UnhandledExceptionAction задано значение Abandon, сведения о развертывании службы записываются в хранилище экземпляров, а экземпляр выгружается из памяти. Экземпляр остается в нематериализованном состоянии в базе данных сохраняемости.
Если для свойства UnhandledExceptionAction задано значение AbandonAndSuspend, сведения о развертывании службы записываются в базу данных сохраняемости, а состояние экземпляра имеет значение "Приостановлено". Экземпляр нельзя возобновить, отменить или завершить. Узел службы не может загрузить экземпляр, так как экземпляр еще не материализован, поэтому запись в базе данных для экземпляра не завершена (не полна).
Если для свойства UnhandledExceptionAction задано значение Cancel или Terminate, сведения о развертывании службы записываются в хранилище экземпляров, а состояние экземпляра имеет значение Completed.
В следующих разделах представлены образцы запросов для поиска нематериализованных экземпляров в базе данных сохраняемости SQL и удаления этих экземпляров из базы данных.
Обнаружение всех еще не материализованных экземпляров
Следующий SQL-запрос возвращает идентификатор (ID) и время создания для всех экземпляров, которые еще не материализованы в базе данных сохраняемости.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0;
Обнаружение всех экземпляров, которые еще не материализованы и не загружены
Следующий SQL-запрос возвращает идентификатор (ID) и время создания для всех экземпляров, которые не материализованы и не загружены.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL;
Обнаружение всех приостановленных, но еще не материализованных экземпляров
Следующий SQL-запрос возвращает идентификатор (ID), время создания, причину приостановки и имя исключения приостановки для всех экземпляров, которые не материализованы и находятся в приостановленном состоянии.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1;
Удаление нематериализованных экземпляров из базы данных сохраняемости
Необходимо периодически проверять хранилище экземпляров на наличие нематериализованных экземпляров и удалять экземпляры из хранилища экземпляров, если можно быть уверенным, что экземпляр не получит коррелированного сообщения. Например, если экземпляр находился в базе данных в течение нескольких месяцев, а известно, что обычная продолжительность существования рабочего процесса составляет несколько дней, можно с уверенностью предположить, что это неинициализированный экземпляр, в котором произошел сбой.
Как правило, нематериализованные экземпляры, которые не приостановлены или не загружены, можно удалять без осложнений. Не следует удалять все не сохраняемые экземпляры, так как этот набор экземпляров включает только что созданные экземпляры, но еще не сохраняются. Следует удалять только нематериализованные экземпляры, которые остались неиспользованными, так как в самом экземпляре или в узле службы рабочего процесса, в котором был загружен экземпляр, произошло исключение.
Предупреждение
Удаление нематериализованных экземпляров из хранилища экземпляров уменьшает размер хранилища и может повысить производительность операций с хранилищем.