SQL 处理期间发生的情况

使用 SQL 调用处理 CICS® 事务时涉及的主要 Db2® 活动包括: 线程创建, SQL 处理,落实处理,线程释放和线程终止。 这些主要活动是针对每个事务执行的。 每个活动中涉及的确切工作取决于 DB2CONN 和 DB2ENTRY 选项, BIND 选项以及是否使用程序包。

线程创建

在线程创建时,会发生许多活动,这些活动包括必须始终执行的计划授权检查。

根据已指定的 BIND 选项,可能会在线程创建时发生以下活动:
  • 注册。
  • 请检查最大线程数。
  • 对于应用程序计划,装入框架游标表 (SKCT) 和头 (如果尚未在环境描述管理器 (EDM) 池中)。
  • 在游标表 (CT) 中创建 SKCT 头的副本。
  • 执行计划授权检查。

应用程序计划的控制块 SKCT 分为多个部分。 SKCT 的头和目录包含控制信息; SQL 部分包含来自应用程序的 SQL 语句。 将为执行计划的每个线程制作 SKCT (CT) 的副本。 仅当创建线程时,才会装入头和目录 (如果它们尚未在 EDM 池中)。

在创建线程时,绝不会将计划段的 SQL 段复制到 CT 中。 执行相应的 SQL 语句时,将逐节复制这些语句。 对于具有 RELEASE (DEALLOCATE) 的受保护线程, CT 的大小会增加,直到将所有段都复制到 CT 为止。

如果事务的 SQL 语句绑定到包而不是方案,那么 Db2 将使用框架包表 (SKPT) 而不是 SKCT ,而使用包表 (PT) 而不是 CT。 执行第一个 SQL 语句时分配 SKPT; 创建线程时不分配 SKPT。

SQL 处理

对于处理的每个 SQL 语句,可能会发生许多活动。 这些活动因线程复用和 BIND 选项而异。

  • 对于复用具有新授权标识的线程的事务中的第一个 SQL 调用,可能会发生以下操作:
    • 登录
    • 授权检查
  • 如果 SKCT SQL 部分尚未在 EDM 池中,请将其装入。
  • 在 CT 中创建 SKCT SQL 部分的副本 (如果它尚未存在)。
  • 获取引用的 TS 锁定 (如果尚未获取)。
  • 在 EDM 池中装入 DBD (如果它们尚未存在)。
  • 处理 SQL 语句。

如果 SQL 语句位于包中,那么将装入 SKPT 目录和头。 PT 是在语句执行时分配的,而不是在线程创建时分配的,如 SKCT 和 CT 用于绑定计划的情况。

落实处理

在落实时可能会发生许多活动,这些活动包括释放页面锁定和 TS 锁定。

根据您的 BIND 选项,可能会在落实时发生以下活动:
  • 释放页面锁定。
  • 如果指定了 RELEASE (COMMIT):
    • 释放 TS 锁定。
    • 释放 CT 页面。

线程释放

事务将释放它们在不同时间使用的线程,具体取决于事务是否面向终端以及已指定的选项。

如果事务面向终端,或者是非面向终端的 1 ,并且在 DB2CONN中指定了 NONTERMREL=YES ,那么将在 SYNCPOINT 和任务结束时 (EOT) 释放线程。 这使得将受保护线程用于发出许多 SYNCPOINTS 的事务 (如果与 BIND 选项获取 (USE) 和 RELEASE (DEALLOCATE) 结合使用) 非常有效。 在这种情况下,将为每个同步点保存用于执行以下活动的资源:
  • 终止并启动线程。
  • 释放并获取 TS 锁定。
  • 将计划的分段释放并复制到 CT 中。
在以下情况下,不会在 SYNCPOINT 时间释放线程:
  • 挂起的游标已打开。
  • 某些 Db2 可修改专用寄存器未处于其初始值。 SQL: Db2 for z/OS 产品文档中的 Db2 语言列出了这些特殊寄存器。
  • Db2 可修改专用寄存器 CURRENT DEGREE 在 CICS 任务的生存期内从未更改过。

如果事务不是面向终端的,并且您指定了 NONTERMREL=NO ,那么仅在 EOT 处释放线程。 在执行 EXEC CICS SYNCPOINT 命令之后,您不需要使用受保护线程来获取线程复用。 如果这是频繁使用的事务,那么您可能仍希望使用受保护的线程。 BIND 选项获取 (USE) 和 RELEASE (DEALLOCATE) 具有与具有许多同步点的面向终端的事务相同的优点。

注: 1 非面向终端的事务是未与终端关联的事务。

线程终止

在线程终止时,可能会发生许多活动,这些活动包括释放 TS 锁定和释放工作存储器。

根据 BIND 选项,在线程终止时可能会发生以下活动:
  • 如果指定了 RELEASE (DEALLOCATE):
    • 释放 TS 锁定。
    • 免费 CT 页面。
  • 免费工作存储器。