RELEASE 绑定选项

“释放”选项决定何时释放程序使用的资源,是在每次提交时还是程序终止时。

RELEASE选项对许多动态SQL语句没有影响,这些语句通常使用RELEASE(COMMIT)行为,但也有一些例外。 更多信息,请参阅动态 SQL 语句和 RELEASE(DEALLOCATE) 选项

命令选项 选项价值 搭配
RELEASE
  • 犯罪
  • (DEALLOCATE)
  • (INHERITFROMPLAN 1
注:
  1. 对于原生REST服务的包的重新绑定, RELEASE(INHERITFROMPLAN) 选项无效。
  2. RELEASE绑定选项不适用于本地SQL程序包高级触发器的 REBIND。

分区锁遵循与表空间锁相同的规则,表空间的所有分区锁都有相同的保持时间。 因此,如果一个软件包使用 RELEASE(COMMIT),而另一个软件包使用 RELEASE(DEALLOCATE),那么表空间的所有分区锁都会使用 RELEASE(DEALLOCATE)。

RELEASE选项不影响页面、行、LOB或XML锁定。

选项说明 RELEASE

RELEASE 犯罪
Db2 在每次提交时释放资源,除非光标被保留。 如果应用程序再次访问对象,则必须再次获取锁。

除非光标定义为“保持”,否则表格、分区或表格空间锁定将在下一个提交点解除。 在“保持”选项下定义的游标是一个例外,保持游标位置所需的锁定会一直持续到提交点之后。

当“发布(提交)”选项生效时,锁的释放时间取决于附件设施:

环境 释放条件
TSO、Batch和CAF 发出SQL COMMIT或ROLLBACK语句,或者您的应用程序进程终止。
IMS CHKP或SYNC调用(用于单模式事务处理)、GU调用I/O PCB或ROLL或ROLB调用完成。
CICS 发出SYNCPOINT命令。

如果应用程序从包含有效选项RELEASE(DEALLOCATE)的包中发出后续语句,则最初通过有效选项RELEASE(COMMIT)获得的锁定可能会被提升为解除分配。 更多信息,请参阅 “具有多个软件包和混合RELEASE选项的应用程序 ”。

RELEASE(DEALLOCATE)

在“释放(解除分配)”选项生效的情况下, Db2 通常只在线程终止时释放锁和其他资源。

然而,在某些情况和设置中,RELEASE(DEALLOCATE)选项不适用,或者释放行为被修改。 有关更多信息,请参阅以下各节:

RELEASE(DEALLOCATE)选项可以增加包或计划的大小,因为包或计划中驻留的项目更多。

RELEASE(INHERITFROMPLAN)
允许本地软件包从计划中继承RELEASE选项的值,无论该软件包是远程绑定还是本地绑定。

如果您使用RELEASE(INHERITFROMPLAN)选项远程绑定包,而远程服务器不理解INHERITFROMPLAN值,则服务器可能会返回错误。

在以下情况下,由于不存在关联的计划,因此不应用“发布(从计划中继承)”选项:

  • 如果您在本地绑定应用程序,然后将程序包复制到远程服务器。
  • 如果您绑定了一个使用RRSAF的应用程序。
  • 对于为实用程序创建的任何软件包。

在这种情况下,RELEASE(COMMIT)对软件包生效。

默认值 RELEASE

进程 缺省值
绑定服务 COMMIT
绑定计划 COMMIT
绑定程序包
  • 对于本地服务器:计划值
  • 对于远程服务器:提交
重新绑定计划 现有值
重新绑定程序包 现有值
重新绑定触发器包 现有值

包含多个软件包和混合发布选项的应用程序

如果应用程序从多个包中发布具有不同发布绑定选项的语句,则应用程序流程中有效的发布选项可能会发生变化。 也就是说,锁可能首先以RELEASE(COMMIT)持续时间获得,但随后在应用程序运行来自不同包的带有RELEASE(DEALLOCATE)选项的后续语句时升级为RELEASE(DEALLOCATE)。

当多个包的语句获得同一表空间的分区锁时,所有分区锁的保持时间相同。 如果访问表空间的第一个语句来自使用RELEASE(COMMIT)绑定选项的程序包,则所有分区锁均遵循RELEASE(COMMIT)规则。 然而,如果使用RELEASE(DEALLOCATE)绑定选项的另一个包的后续语句访问同一表空间中的分区,则所有分区锁都将提升为遵循RELEASE(DEALLOCATE)规则。

动态SQL语句和RELEASE(DEALLOCATE)选项

RELEASE绑定选项对某些动态SQL语句无效,这些语句使用RELEASE(COMMIT)行为,但以下情况除外:

为彰显个性而购买的锁具将一直保留,直到发生以下情况之一:

  • 申请流程结束(取消分配)
  • 应用程序会发出一个带有相同语句标识符的PREPARE语句。 (在下一个提交点解锁。)
  • 该语句因未使用而被从缓存中移除。 (在下一个提交点解锁。)
  • 声明所依赖的对象被删除或更改,或者声明所需的特权被撤销。 (在下一个提交点解锁。)

分布式包和RELEASE(DEALLOCATE)选项

在大多数情况下,通过DRDA连接到客户端系统在 Db2 服务器上执行的程序包可以应用RELEASE(DEALLOCATE)选项。 然而,如果在 Db2 服务器上发出MODIFY DDF PKGREL(COMMIT)命令,则RELEASE(DEALLOCATE)选项对通过客户端系统连接在该服务器上执行的程序包无效。

更多信息,请参阅 《高性能DBAT的解控分配》 和《》。

启用RELEASE(DEALLOCATE)选项

更改开始在某些情况下, Db2 可以释放锁和其他资源,以便在需要访问包和目录时允许DDL语句等进程进入:
活跃线程的磨合

如果 PKGREL_COMMIT 子系统参数设置为默认值 YES,则当某些操作等待对包的独占访问时, Db2 线程会在 COMMIT 或 ROLLBACK 时释放活动包。

对于绑定有RELEASE(DEALLOCATE)选项的包,当包处于活动状态并为持久性 Db2 线程分配时,以下操作可以在COMMIT或ROLLBACK时进行:

  • 绑定替换包和重新绑定包请求,包括自动重新绑定包静态引用的表和索引的在线模式更改(DDL语句)
  • 在线REORG操作,实现程序包静态引用的对象的定义变更

缺省值是 YES。

更多信息,请参阅 “包发布提交”字段(PKGREL_COMMIT子系统参数 )。

空闲线程的磨合
如果一个包锁可能会超时, Db2 会回收任何使用本地附件功能的空闲线程,例如 CICS®、 IMS 或RRSAF。 符合以下条件的线材可以回收利用:
  • 处于交易边界
  • 不运行 Db2
  • 最近没有提交或撤回过内容
更改结束

声明临时表和RELEASE(DEALLOCATE)选项

当指定RELEASE(DEALLOCATE)时,除非使用ON COMMIT DROP TABLE选项定义表,否则引用已声明临时表的某些静态和动态语句也会作为跨提交点的预处理语句保留。 在提交点处保留的语句包括INSERT、UPDATE、DELETE、MERGE和SELECT INTO语句。 如果满足以下条件之一,则提交点不会保留该语句:

  • 已声明的全局临时表使用ON COMMIT DROP TABLE选项定义。
  • 该语句还引用了 Db2 基本对象(例如表或视图),且以下语句之一为真:
    • 基本对象引用用于 Db2 目录表。
    • 在提交点, Db2 确定另一个 Db2 线程正在等待基础对象数据库描述符(DBD)上的X-lock。
    • 该语句引用了XML函数或操作,在提交点 Db2 确定必须释放XML操作的基础对象DBD S-lock。
    • 在提交点, Db2 确定语句使用的基对象DBD S-lock必须被释放,且不能在提交点之间保持。
  • Db2 确定另一个 线程正在等待包含该语句的 包的X-lock。 Db2 Db2

锁定降级和释放(取消分配)选项

如果一个锁在提交后仍保持锁定状态,且该锁是表格空间或分段表格空间中的S、SIX或X锁, Db2 有时会在提交时将该锁降级为意向锁(IX或IS)。 Db2 如果出于以下原因之一购买,则降低锁的等级:

  • Db2 由于锁升级,获得了总锁。
  • 应用程序发出了批量删除(DELETE FROM 对象 ,不带WHERE子句或TRUNCATE)。

目录记录 RELEASE

请参阅SYSPACKAGE目录表SYSPLAN目录表中的 “发布”列。