表达式队列调优

根据每次安装的服务器资源、表达式计数和复杂性,表达式引擎可能需要进行调优。 一般而言,该过程涉及一次重复调优和度量一个参数的性能,直到该性能无法再提升为止。这些记录必须保留。针对硬件、使用情况和设置的更改需要进行新一轮的调优。
作为管理员,必须针对每次安装检查以下应用程序设置:
表 1. 表达式队列调优应用程序设置
设置 单元 缺省值 运行时* 描述 调优提示
formula.queue.maxage 小时 24 保留表达式队列历史记录的最大(不保证)小时数。仅删除运行表达式。这是通过公式清除作业完成的。 公式队列表中已执行的队列条目将保存为执行历史记录。此历史记录用于检查执行循环以及生成统计信息。如果不需要统计信息,可以在高吞吐量设置中降低此数字以保证降低表大小。请勿将该值设置为零,因为适当的循环检查至少需要一个小时的历史记录。
formula.queue.maxsize 条目数 500000 表达式队列中期望的条目最大数目。清除作业通过删除历史记录尝试保持输入计数小于该数字。仅删除运行表达式。这会覆盖 formula.queue.maxage 设置。 可以降低此数字以减小高负载期间公式队列大小,以及保存历史记录。该数字适当的近似值是略小于 formula.queue.maxage 时间段内的吞吐量平均值。
formula.execution.batch.size 条目数 30 在每次分配运行时针对一个线程所分配的表达式队列条目数。条目标记为“已启动”。线程通过它们运行,并且在分配新的批处理前完成它们。

这是重要设置。后台信息:表达式会同时在几个节点上的多个线程上无序执行,但是始终遵照明确依赖关系的时间顺序。例如,如果队列上的两个表达式不相关,那么它们可以按照非添加时的顺序执行。因此,如果存在表达式条目的实例,或者条目依赖于其他条目的值,而这些其他条目不会在该条目之前执行,那么不可以执行这些表达式条目。这(以及并发性)需要通过分配来避免冲突、错误顺序和冗余工作。

因为分配是昂贵的操作,多个表达式随上述需求一起分配,并且含按指定顺序执行的条件。如果分配了大量表达式,那么会节约分配开销,但这“锁定”了并发性,反之亦然。如果表达式形成了很长的依赖关系链,通常的做法是减小该数字;如果依赖关系链很短或者依赖关系极少,那么增加该数字。 您可以在运行时更改该值,因此应对其进行调优,直至找到合适的最佳值。 最佳值很少小于 10 或大于 200。

formula.cleanup.interval 毫秒 1800000 清理表达式队列的频率。这会强制进行最长期限和最大大小。通常,仅发生队列删除。在服务器启动时发生第一次清理,此时会完成特殊维护。同样,每隔两周会完成一次计时器表达式完整性检查(在夜间)。 大部分情况下,缺省值是合适的。 如果吞吐量较高,清理时间会较长,不过还应该更常执行清理,反之亦然。如果该时间增加过长,需引起注意,这是因为当负载骤然增加时(例如,在一次导入或添加属性后),可能会造成执行中断或性能不佳。
formula.background.interval 毫秒 10000 检查表达式队列以便新的未分配表达式运行的频率。当完成一个批处理后,新的检查会立即开始,而不会等待一定时间间隔。 如果在下一个时间间隔发生时队列仍包含未求值的条目,那么会衍生一个新的工作程序线程来增加工作。 Rational® Focal Point™ 较早的版本中,执行是异步和即时的。在将表达式移动到数据库时,一定会出现死锁的风险。 这是检查表达式队列以便新表达式运行的时间间隔,即用户必须等待(读取:刷新)表达式执行的最大时间(包括执行时间)。如果不存在,那么轮询未求值的队列条目并不昂贵,因此时间可能很短。然而,如果时间间隔过短,那么会不必要的浪费资源。 这还会影响并发性的上升。如果在上一个时间间隔触发的工作程序线程未在时间间隔内完成,那么将启动另一个线程(直到 thread.per.nodes)。如果上升过于缓慢,或者需要更低的求值延迟,那么可以降低此数目。如果表达式很少使用,可以稍微增加该数字。
formula.max.background.threads.per.node 计数 2 针对每个节点运行表达式的最大并发线程数。实际的最大数目动态取决于在应用程序线程池中是否存在自由线程。 如果要完成更多工作,background.interval 中描述的并发性上升会增加每个时间间隔内节点上的表达式求值线程数。这需要应用程序线程池中具有自由线程,该线程池会根据 CPU 核心(虚拟或物理)数目自动进行调优。它还要求不使用池中最近的线程。您可以试用此数目。然而,不能保证更高的性能,因为这在很大程度上取决于要保持的数据库的并行能力。该值过低的标志是队列经常有未求值的表达式,并且数据库负载低。
formula.cleanup.enabled 布尔值 true 缺省情况下,表达式队列清除处于启用状态。除了出于调试目的或运行性能测量时必须阻止清除,任何时候都不得将其禁用。 该设置不存在调优。不得更改。请保留缺省值“true”。

* 运行时指示应用程序设置是在运行时生效(“是”指示)还是仅在启动时生效(“否”指示)。


反馈