如何创建、使用和终止线程
CICS® Db2® 连接设施使用三种主要类型的线程: 命令线程,条目线程和池线程。 创建、使用和终止线程时需遵循特定的规则。
当 CICS 连接到 Db2时,线程 TCB 是 CICS Db2 连接设施已在其上运行的开放式 TCB。 当需要运行线程时, CICS Db2 连接设施会将开放式 TCB 与它要使用的 Db2 连接控制块和线程相关联,然后开放式 TCB 会运行该线程。 当不再需要线程时,开放式 TCB 将与其取消关联,并且 Db2 连接控制块和线程可供另一个开放式 TCB 复用。
- 当 CICS 连接到 Db2 并且使用打开的 TCB 作为线程 TCB 时,在 SQL 请求可以传递到 Db2 之前,必须有一个线程可用于事务。 开放式 TCB 将自身与线程相关联,并成为线程 TCB ,直到它与线程解除关联为止。
- 创建线程时,如果另一个具有新授权标识的事务正在复用线程,那么 Db2 将对新授权标识进行授权检查。
- 面向终端的事务通常在同步点和任务结束时释放线程。 如果挂起的游标处于打开状态或任何可修改的专用寄存器未处于初始状态,那么 不会 在同步点释放线程。
- 非面向终端的事务仅在任务结束时释放线程,除非在 DB2CONN中指定了 NONTERMREL=YES。
- 当事务释放线程时,该线程可由另一个正在指定同一计划且在同一 DB2ENTRY中定义的事务复用。 任何正在指定同一计划并使用池线程的等待 (排队) 事务都可以复用池线程。
- 未受保护的线程将立即终止,除非另一个事务正在等待 (排队) 该线程。
- 如果在两个连续清除周期中未使用受保护线程,那么将终止该线程。 使用缺省设置时,此平均值约为 45 秒。 此值可由 DB2CONN的PURG情况参数修改。
- 如果在清除或强制清除使用线程的 CICS 任务时线程在 Db2 中处于活动状态,那么将取消并终止该线程。
- DB2CONN 的 REUSELIMIT 参数指定线程在终止之前可以复用的最大次数。 复用限制适用于池中和 DB2ENTRY上不受保护的线程以及受保护的 DB2ENTRY 线程。
- THREADWAIT 参数定义在缺少条目或命令线程的情况下,是否应该对线程的请求进行排队,异常结束或发送到池线程。 如果指定了 THREADWAIT = YES 而不是 THREADWAIT = POOL ,那么事务将排队而不是发送到池线程。 使用 THREADWAIT = YES 可避免线程初始化和终止开销。 如果由于缺少入口线程而使事务等待,那么 CICS Db2 连接设施会将该事务排队。 此排队的优点是,当入口线程完成其当前工作时,它将立即继续下一个事务。
- TCBLIMIT 指定可用于运行 Db2 线程的 TCB 的最大数目,这反过来限制了活动 Db2 线程的最大数目。 THREADLIMIT 指定最大活动 Db2 线程数。 THREADLIMIT 是动态修改的。 CTHREAD 在 ZPARMS 中指定,它定义所有 Db2的并发线程数。 来自 TSO 用户,所有 CICS 和 IMS 系统以及访问 Db2 的其他系统的所有活动线程的总和不应超过 CTHREAD。 否则,结果可能是不可预测的响应时间。 发生此情况时, CICS Db2 连接设施
创建线程
请求将由 Db2排队,并且 CICS 事务处于等待状态,直到线程可用为止。CICS 管理 CICS 区域在任何时候运行的 L8 和 L9 方式 TCB 的总数。 开放式 TCB 池中 L8 和 L9 方式 TCB 的最大数目由 MXT 或 MAXOPENTCBS 系统初始化参数控制。 MAXOPENTCBS 系统初始化参数 (如果指定) 设置开放式 TCB 池的值。 如果未指定 MAXOPENTCBS 系统初始化,那么 CICS 会根据为 CICS 区域指定的最大任务数 (MXT 值) ,使用公式
(2 * MXT Value) + 32自动设置 L8 和 L9 方式开放式 TCB 池的限制。 在开放式事务环境中, TCBLIMIT 控制 CICS Db2 任务相关的用户出口可以使用其中的多少个开放式 TCB 来将线程运行到 Db2中。 如果达到了 CICS 设置的限制,那么在 CICS 区域中不再允许打开 TCB ,并且与 CICS Db2 任务相关的用户出口无法获取开放式 TCB 以供其使用。将 CICS 链接到 Db2 的每个线程都在 CICS 地址空间中具有相应的 TCB。 每个地址空间中存在过多的TCB,这会导致 MVS 调度程序需要扫描所有TCB以识别活动TCB。 如果有大量的 TCB ,那么处理器时间可能会有很大的成本。 然而,如果可用TCB数量不足以满足工作 Db2 负载需求,事务必须等待以获取TCB。
增加 TCBLIMIT 值或设置具有相同 Db2 系统访问权的其他 CICS 系统可能需要增加 Db2的 CTHREAD 参数。
对于受保护的条目线程环境,请查看应用程序计划数,如果可能,请通过组合不常用的计划来减少计划数,同时平衡计划大小和安全性问题。 最初,您应该从每个套餐一个线程开始。 在大容量事务处理环境中,您可以通过将线程占用时间与事务相乘并将其与预期事务速率相乘来估算初始数量。 例如,占用时间为 0.2 秒,事务速率为每秒 20 个事务 (0.2 x 20) 将提供 3 到 4 之间的初始线程数。