UiPath Orchestrator

UiPath Orchestrator ガイド

メンテナンスに関する考慮事項

Orchestoratorのパフォーマンス低下や障害を防ぐためにデータベースをメンテナンスすることは重要です。そのために、次のことが推奨されます。

SQL サーバーのメンテナンスソリューションを使用する

SQL サーバーのメンテナンスソリューションは、バージョン 2005 以降のすべてのバージョンの Microsoft SQL サーバーについてバックアップ、完全性チェック、インデックス、統計のメンテナンスを行います。詳細については、この GitHub プロジェクトを参照してください。

アーカイブデータベースの作成

項目を削除する前に保存するデータベースを別に作成することをお勧めします。こうすることで、このデータベースは監査などの理由で保存する必要がある項目のアーカイブとして機能します。

  1. たとえば、UiPathArchives という新しいデータベースを作成します。
create database UiPathArchives
  1. 作成するバックアップテーブル:
    2.1.Logs テーブルと同じ構造の ArchiveLogs
select * into [UiPathArchives].[dbo].[ArchiveLogs]from [UiPath].[dbo].[Logs]where 1=2

2.2. QueueItemsQueueItemsEvents、および QueueItemsComments テーブルと同じ構造の ArchiveQueueItemsArchiveQueueItemEvents、および ArchiveQueueItemComments

select * into [UiPathArchives].[dbo].[ArchiveQueueItems]from
[UiPath].[dbo].[QueueItems]where 1=2
select * into [UiPathArchives].[dbo].[ArchiveQueueItemEvents]from [UiPath].[dbo].[QueueItemEvents]where 1=2
select * into [UiPathArchives].[dbo].[ArchiveQueueItemComments]from [UiPath].[dbo].[QueueItemComments]where 1=2

2.3. RobotLogs テーブルと同じ構造の ArchiveRobotLogs

select * into [UiPathArchives].[dbo].[ArchiveRobotLicenseLogs]from [UiPath].[dbo].[RobotLicenseLogs]where 1=2

2.4. TenantNotifications および UserNotifications テーブルと同じ構造の TenantNotificationsArchive および UserNotificationsArchive

select * into [UiPathArchives].[dbo].[ArchiveTenantNotifications]from
[UiPath].[dbo].[TenantNotifications]where 1=2
select * into [UiPathArchives].[dbo].[ArchiveUserNotifications]from [UiPath].[dbo].[UserNotifications]where 1=2

2.5. Jobs テーブルと同じ構造の ArchiveJobs

select * into [UiPathArchives].[dbo].[ArchiveJobs]from [UiPath].[dbo].[Jobs]where 1=2

2.5. AuditLog および AuditLogEntities テーブルと同じ構造の ArchiveAuditLogs および ArchiveAuditLogEntities

select * into [UiPathArchives].[dbo].[ArchiveAuditLogs]from
[UiPath].[dbo].[AuditLogs]where 1=2
select * into [UiPathArchives].[dbo].[ArchiveAuditLogEntities]from [UiPath].[dbo].[AuditLogEntities]where 1=2

2.6 Tasks テーブルと同じ構造の ArchiveTasks

select * into [UiPathArchives].[dbo].[ArchiveTasks]from [UiPath].[dbo].[Tasks]where 1=2

下記のクエリーを使用すると、古いデータが削除される前にこれらのアーカイブにコピーされます。

古いデータの定期的な削除

キュー アイテム

60 日を経過した、正常に処理されたキュー アイテムおよび関連するイベントならびにコメント (status = 3) を削除するには、たとえば以下のクエリを使用します。任意で、where 句を TenantId に含めることができます。

SQL サーバーのジョブで手動で実行するか、スケジュールで実行することができます。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from QueueItems
where status=3
-- and TenantId = 1
-- and ReviewStatus != 0
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
-------------------- QueueItemEvents
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItemEvents]on
insert into [UiPathArchives].[dbo].[ArchiveQueueItemEvents]
([Id],[TenantId],[OrganizationUnitId],[QueueItemId],[TimeStamp],[Action],[UserId],[Status],[ReviewStatus],[ReviewerUserId],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[OrganizationUnitId],[QueueItemId],[TimeStamp],[Action],[UserId],[Status],[ReviewStatus],[ReviewerUserId],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[QueueItemEvents]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
delete from [UiPath].[dbo].[QueueItemEvents]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItemEvents] off
-------------------- QueueItemComments
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItemComments]on
insert into [UiPathArchives].[dbo].[ArchiveQueueItemComments]
([Id],[TenantId],[OrganizationUnitId],[QueueItemId],[Text],[IsDeleted],[DeleterUserId],[DeletionTime],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[OrganizationUnitId],[QueueItemId],[Text],[IsDeleted],[DeleterUserId],[DeletionTime],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[QueueItemComments]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
delete from [UiPath].[dbo].[QueueItemComments]
where Exists (select 1 from #TempDeletedIds where IdToDelete = QueueItemId)
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItemComments] off
-------------------- QueueItems
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItems]on
insert into [UiPathArchives].[dbo].[ArchiveQueueItems]
([Id],[Priority],[QueueDefinitionId],[Key],[Status],[ReviewStatus],[RobotId],[StartProcessing],[EndProcessing],[SecondsInPreviousAttempts],[AncestorId],[RetryNumber],[SpecificData],[TenantId],[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[DeferDate],[DueDate],[Progress],[Output],[OrganizationUnitId],[RowVersion],[ProcessingExceptionType],[HasDueDate],[Reference],[ReviewerUserId],[ProcessingExceptionReason],[ProcessingExceptionDetails],[ProcessingExceptionAssociatedImageFilePath],[ProcessingExceptionCreationTime],[CreatorJobId],[ExecutorJobId]
)
select
[Id],[Priority],[QueueDefinitionId],[Key],[Status],[ReviewStatus],[RobotId],[StartProcessing],[EndProcessing],[SecondsInPreviousAttempts],[AncestorId],[RetryNumber],[SpecificData],[TenantId],[LastModificationTime],[LastModifierUserId],
[CreationTime],[CreatorUserId],[DeferDate],[DueDate],[Progress],[Output],[OrganizationUnitId],NULL,[ProcessingExceptionType],[HasDueDate],[Reference],[ReviewerUserId],[ProcessingExceptionReason],[ProcessingExceptionDetails],[ProcessingExceptionAssociatedImageFilePath],[ProcessingExceptionCreationTime],[CreatorJobId],[ExecutorJobId]
from [UiPath].[dbo].[QueueItems]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[QueueItems].[Id])
delete from [UiPath].[dbo].[QueueItems]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[QueueItems].[Id])
set identity_insert [UiPathArchives].[dbo].[ArchiveQueueItems] off
drop table #TempDeletedIds
commit transaction

ログメッセージ

60 日を経過したログ メッセージは、削除することを推奨します。下のクエリ例は、60 日を経過した Info レベルの古いメッセージを削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、Level および TenantIdwhere 句を追加します。

📘

注:

削除されるログをアーカイブしたくない場合は、copy 句を削除してください。
insert into [ArchiveLogs] select from [Logs]

SQL サーバーのジョブで手動で実行するか、スケジュールで実行することができます。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathArchives].[dbo].[ArchiveLogs]on
insert into [UiPathArchives].[dbo].[ArchiveLogs]
([Id],[OrganizationUnitId],[TenantId],[TimeStamp],[Level],[WindowsIdentity]
,[ProcessName],[JobKey],[RobotName],[Message],[RawMessage],[MachineId])
select
[Id],[OrganizationUnitId],[TenantId],[TimeStamp],[Level],[WindowsIdentity]
,[ProcessName],[JobKey],[RobotName],[Message],[RawMessage],[MachineId]
from [UiPath].[dbo].[Logs]
where 1=1
-- and level = 2
/*
  0 = Verbose, 1 = Trace, 2 = Info,
  3 = Warn, 4 = Error, 5 = Fatal
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, TimeStamp, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[Logs]
where 1=1
-- and level = 2
/*
  0 = Verbose, 1 = Trace, 2 = Info,
  3 = Warn, 4 = Error, 5 = Fatal
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, TimeStamp, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathArchives].[dbo].[ArchiveLogs] off
commit transaction

RobotLicenseLogs のクリーンアップ

RobotLicenseLogs テーブル内の 60 日を経過した項目は、削除することを推奨します。下のクエリ例は、60 日を経過した古い項目を削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、TenantIdwhere 句を追加します。

📘

注:

削除されるログをアーカイブしたくない場合は、copy 句を削除してください。
insert into [ArchiveRobotLicenseLogs] select from [RobotLicenseLogs]

SQL サーバーのジョブで手動で実行するか、スケジュールで実行することができます。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathArchives].[dbo].[ArchiveRobotLicenseLogs]on
insert into [UiPathArchives].[dbo].[ArchiveRobotLicenseLogs]
([Id],[RobotId],[StartDate],[EndDate],[RobotType],[TenantId],[Scope],[Key],[Slots],
[LicenseKey],[Properties],[ErrorCode])
select
[Id],[RobotId],[StartDate],[EndDate],[RobotType],[TenantId],[Scope],[Key],[Slots],
[LicenseKey],[Properties],[ErrorCode]
from [UiPath].[dbo].[RobotLicenseLogs]
where EndDate is not null
-- and TenantId = 1 -- default tenant
and DateDiff(day, EndDate, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[RobotLicenseLogs]
where EndDate is not null
-- and TenantId = 1 -- default tenant
and DateDiff(day, EndDate, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathArchives].[dbo].[ArchiveRobotLicenseLogs] off
commit transaction

TenantNotifications および UserNotifications のクリーンアップ

TenantNotifications および UserNotifications テーブル内の 60 日を経過した項目は、削除することを推奨します。下のクエリ例は、60 日を経過した古い項目を削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、TenantIdwhere 句を追加します。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create a temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from TenantNotifications
where 1=1
-- and TenantId = 1
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
-------------------- UserNotifications
insert into [UiPathArchives].[dbo].[ArchiveUserNotifications]
([Id],[UserId],[TenantNotificationId],[State],[CreationTime],[TenantId])
select
[Id],[UserId],[TenantNotificationId],[State],[CreationTime],[TenantId]
from [UiPath].[dbo].[UserNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = TenantNotificationId)
delete from [UiPath].[dbo].[UserNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = TenantNotificationId)
-------------------- TenantNotifications
insert into [UiPathArchives].[dbo].[ArchiveTenantNotifications]
([Id],[TenantId],[NotificationName],[Data],[DataTypeName],[EntityTypeName],
[EntityTypeAssemblyQualifiedName],[EntityId],[Severity],[CreationTime],[CreatorUserId])
select
[Id],[TenantId],[NotificationName],[Data],[DataTypeName],[EntityTypeName]
,[EntityTypeAssemblyQualifiedName],[EntityId],[Severity],[CreationTime],[CreatorUserId]
from [UiPath].[dbo].[TenantNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[TenantNotifications].[Id])
delete from [UiPath].[dbo].[TenantNotifications]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[TenantNotifications].[Id])
drop table #TempDeletedIds
commit transaction

Jobs のクリーンアップ

RobotLicenseLogs テーブル内の 60 日を経過した項目は、削除することを推奨します。下のクエリ例は、60 日を経過した古い項目を削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、TenantIdwhere 句を追加します。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
set identity_insert [UiPathArchives].[dbo].[Archivejobs]on
insert into [UiPathArchives].[dbo].[Archivejobs]
([Id],[TenantId],[Key],[StartTime],[EndTime],[State],[RobotId],[ReleaseId]
,[Source],[BatchExecutionKey],[Info],[IsDeleted],[DeleterUserId],[DeletionTime]
,[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
,[OrganizationUnitId],[StartingScheduleId],[Type],[InputArguments],[OutputArguments])
select
[Id],[TenantId],[Key],[StartTime],[EndTime],[State],[RobotId],[ReleaseId]
,[Source],[BatchExecutionKey],[Info],[IsDeleted],[DeleterUserId],[DeletionTime]
,[LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId]
,[OrganizationUnitId],[StartingScheduleId],[Type],[InputArguments],[OutputArguments]
from [UiPath].[dbo].[jobs]
where 1=1
-- and State = 4
/*
  0 = ?, 1 = ?, 2 = ?,
  3 = ?, 4 = Completed, 5 = ?
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
delete from [UiPath].[dbo].[jobs]
where 1=1
-- and State = 4
/*
  0 = ?, 1 = ?, 2 = ?,
  3 = ?, 4 = Completed, 5 = ?
*/
-- and TenantId = 1 -- default tenant
and DateDiff(day, CreationTime, GetDate()) > @NumberOfDaysToKeep
set identity_insert [UiPathArchives].[dbo].[Archivejobs] off
commit transaction

AuditLogs および AuditLogEntities のクリーンアップ

RobotLicenseLogs テーブル内の 60 日を経過した項目は、削除することを推奨します。下のクエリ例は、60 日を経過した古い項目を削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、TenantIdwhere 句を追加します。

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
-- create temp table with list of IDs that we want to delete
select ID as IdToDelete into #TempDeletedIds from AuditLogs
where 1=1
-- and TenantId = 1
and DateDiff(day, ExecutionTime, GetDate()) > @NumberOfDaysToKeep
-------------------- AuditLogEntities
set identity_insert [UiPathArchives].[dbo].[ArchiveAuditLogEntities]on
insert into [UiPathArchives].[dbo].[ArchiveAuditLogEntities]
([Id],[EntityName],[EntityId],[AuditLogId],[CustomData],[Action])
select
[Id],[EntityName],[EntityId],[AuditLogId],[CustomData],[Action]
from [UiPath].[dbo].[AuditLogEntities]
where Exists (select 1 from #TempDeletedIds where IdToDelete = AuditLogId)
delete from [UiPath].[dbo].[AuditLogEntities]
where Exists (select 1 from #TempDeletedIds where IdToDelete = AuditLogId)
set identity_insert [UiPathArchives].[dbo].[ArchiveAuditLogEntities] off
-------------------- AuditLogs
set identity_insert [UiPathArchives].[dbo].[ArchiveAuditLogs]on
insert into [UiPathArchives].[dbo].[ArchiveAuditLogs]
([Id],[TenantId],[UserId],[ServiceName],[MethodName],[Parameters],[ExecutionTime],[ExecutionDuration]
,[ClientIpAddress],[ClientName],[BrowserInfo],[Exception],[ImpersonatorUserId],[ImpersonatorTenantId]
,[CustomData],[Action],[Component],[DisplayName],[Version],[EntityId],[Discriminator])
select
[Id],[TenantId],[UserId],[ServiceName],[MethodName],[Parameters],[ExecutionTime],[ExecutionDuration]
,[ClientIpAddress],[ClientName],[BrowserInfo],[Exception],[ImpersonatorUserId],[ImpersonatorTenantId]
,[CustomData],[Action],[Component],[DisplayName],[Version],[EntityId],[Discriminator]
from [UiPath].[dbo].[AuditLogs]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[AuditLogs].[Id])
delete from [UiPath].[dbo].[AuditLogs]
where Exists (select 1 from #TempDeletedIds where IdToDelete = [UiPath].[dbo].[AuditLogs].[Id])
set identity_insert [UiPathArchives].[dbo].[ArchiveAuditLogs] off
drop table #TempDeletedIds
commit transaction

Actions のクリーンアップ

We recommend deleting the competed items that are older than 60 days in your Tasks table.
Note: Actions are stored in the Tasks table.

下のクエリ例は、60 日を経過した古い項目を削除します。クエリをニーズに合わせて調整し、@NumberOfDaysToKeep パラメーターを変更するか、TenantId または OrganizationUnitIdwhere 句を追加します。

📘

注:

If you don’t want to archive the Tasks that are deleted, remove the insert into [ArchiveTasks] select from [Tasks] statement.

declare @NumberOfDaysToKeep int
set @NumberOfDaysToKeep = 60
begin transaction
    set identity_insert [UiPathArchives].[dbo].[ArchiveTasks]on
    insert into [UiPathArchives].[dbo].[ArchiveTasks]([Id],[Title],[Priority],[Status],[AssignedToUserId],[FormLayout],[Data],[Action],[Type],[TenantId],[OrganizationUnitId],
    [LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[IsDeleted],[DeleterUserId],[DeletionTime],[TaskCatalogId],[IsCompleted],[ExternalTag])
    select
    [Id],[Title],[Priority],[Status],[AssignedToUserId],[FormLayout],[Data],[Action],[Type],[TenantId],[OrganizationUnitId],
    [LastModificationTime],[LastModifierUserId],[CreationTime],[CreatorUserId],[IsDeleted],[DeleterUserId],[DeletionTime],[TaskCatalogId],[IsCompleted],[ExternalTag] 
    from [UiPath].[dbo].[Tasks] 
where 1=1 
    and Status = 2
    /*
      0 = Unassigned, 1 = Pending, 2 = Completed
    */
    -- and TenantId = 1 -- default tenant
    -- and OrganizationUnitId = 1 -- switch to the OrganizationUnit for which you want to delete
    and DateDiff(day, LastModificationTime, GetDate()) > @NumberOfDaysToKeep
    
    delete from [UiPath].[dbo].[Tasks]
where 1=1 
    and Status = 2
    /*
      0 = Unassigned, 1 = Pending, 2 = Completed
    */
    -- and TenantId = 1 -- default tenant
    and DateDiff(day, LastModificationTime, GetDate()) > @NumberOfDaysToKeep
    set identity_insert [UiPathArchives].[dbo].[ArchiveTasks] off
commit transaction

Ledger のクリーンアップ

Ledger および LedgerDeliveries テーブル内の 45 日を経過した項目は、削除することを推奨します。下のクエリ例は、45 日を経過した古い項目を削除します。

SQL サーバーのジョブで手動で実行するか、スケジュールで実行することができます。

-- Ledger table cleanup
DELETE FROM [dbo].[Ledger]WHERE  DateDiff(day, CreationTime, GetDate()) > 45

--LedgerDeliveries table cleanup
DELETE FROM [dbo].[LedgerDeliveries]WHERE  DateDiff(day, LastUpdatedTime, GetDate()) > 45

📘

注:

どれくらい前までの古いアイテムを削除するかを変更する場合には、最後の行の「45」を目的の日数に変更します。

Elasticsearch

Orchestrator は、毎月各テナントについて 1 つのインデックスを保存します。Elasticsearch で古いインデックスを保存すると、検索やレポートで使用されていなくても、パフォーマンスに影響 (メモリ破損) を与える 場合があります。このため、古いインデックスは削除することを推奨します。

データベースのバックアップ

SQL サーバーのデータベースは、週 1 回の完全バックアップや毎日の差分バックアップなど、定期的にバックアップすることを推奨します。

さらに、この場所でスクリプトを使用して作成した DatabaseBackup 保存プロシージャを利用することを推奨します。

約 1 か月前に更新



メンテナンスに関する考慮事項


改善の提案は、API 参照ページでは制限されています

改善を提案できるのは Markdown の本文コンテンツのみであり、API 仕様に行うことはできません。