由于临时表膨胀,活动工作流卡住
本文解释了未从数据库中删除的工作流临时表导致平台整体速度减慢的原因。
描述 description
混合型客户(内部部署营销实例)遇到问题,即由于临时表使用量过大,导致其活动工作流始终卡住,进而导致数据库利用率高和工作流程中断。
数据库清理技术工作流正在运行,但未按预期删除临时表。
解决方法 resolution
在详细模式下运行清理工作流没有提供明确的根本原因,并且涉及研发。 要求客户在其psql数据库(作为Campaign DB用户)上运行以下命令并共享完整输出:
-
工作流状态:
从XtkWorkflow中选择iWorkflowId、sInternalName、sLabel、iState WHERE iWorkflowId IN (id1、id2、id3); -
连接架构/搜索路径:
SELECT current_user, current_schema(), current_setting('search_path') AS search_path; -
每个架构的工作流工作表:
选择架构名称,COUNT AS table_count FROM pg_tables其中TABLENAME LIKE 'wkf%' GROUP BY schemaname ORDER BY table_count DESC;
在共享结果后,发现客户数据库设置使用自定义模式“XYZ”,这与数据库登录用户名UserNameABC不同。 具体来说:
current_user = UserNameABC
current_schema() / search_path = XYZ
所有的工作流临时表都采用“XYZ”模式。
在标准设置中,所有表都驻留在公共模式中。 数据库清理工作流通过过滤从数据库登录名(即UserNameABC)和public派生的模式来列出要删除的表。 由于表处于“XYZ”模式中,清理操作从未找到它们,因此从未删除任何工作流表。
为了修正此问题,要求客户编辑ServerConf.xml中< dbcnx>元素的dbSchema属性
< dbcnx … dbSchema="XYZ" …>
然后运行nlserver/apache restart ,然后运行清理工作流。