...
| Note | ||
|---|---|---|
| ||
1.请关闭您的应用程序服务器。 2.请在进行以下步骤之前先完成数据库备份。 |
1.检查XPDL的现有数量
在通用的生产服务器上,通常只有少数应用程序版本,每个版本只与1个进程版本绑定。这是因为我们不会在生产服务器上进行任何开发,所以进程版本只会在导入的应用程序中增加。但是在开发服务器中,情况会有所不同。进程版本将上升到几百个进程版本,这也意味着有几百个XPDL数据被缓存在内存中。要检查缓存了多少XPDL,请在数据库服务器中运行以下查询。
| Code Block | ||||
|---|---|---|---|---|
| ||||
select count(*) from SHKXPDLS |
2.检查未使用的XPDL的数量
在所有缓存的进程版本XPDL中,有一些进程版本没有被任何进程实例使用。这些未使用的XPDL可以安全地删除。检查未使用的XPDL的数量,我们可以使用下面的查询。然后,我们可以知道在XPDL的总数中有多少是未使用的。
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
select * from SHKXPDLS x
where concat(x.XPDLId, x.XPDLVersion) not in (
select concat(packageId,packageVersion) as id from (
select def.PackageId as packageId, def.ProcessDefinitionVersion as packageVersion
from SHKActivities act
join SHKProcesses pro on act.Process = pro.oid
left join SHKProcessDefinitions def on pro.ProcessDefinition = def.oid
group by def.PackageId, def.ProcessDefinitionVersion
union
select packageId, packageVersion from app_package
) as used_processes group by packageId, packageVersion
); |
3.删除已完成的流程实例数据以清除缓存中的更多XPDL
如果流程实例数据对您并不重要,或者您的流程实例数据被Process Data Collector 插件捕获了副本,则 可以删除流程实例数据以增加未使用的XPDL的数量。在这种情况下,只保存运行流程实例的流程版本和每个应用程序版本的最新流程版本。
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" delete from SHKAssignmentsTable; delete from SHKDeadlines; delete from SHKActivityData; delete from SHKActivities; delete from SHKProcessData; delete from SHKProcessRequesters; delete from SHKProcesses; EXEC sp_MSforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" |
4.删除未使用的XDPL
现在,您可以删除未使用的XPDL,并且在下一次服务器启动时它将从您的内存缓存中释放。
...