耦合设施结构
Db2 依赖于耦合设施中称为结构的存储区域。
数据共享组的成员使用以下耦合设施结构进行通信并在成员之间移动数据。
- 锁定结构
- 锁结构保护共享的 Db2 资源(如表格空间和页面),并允许同时访问这些资源。
系统锁管理器(SLM)是 z/OS® 跨系统扩展服务(XES)的一个组件,它代表每个成员的 IRLM 向锁结构提供全局锁信息。
锁结构由两部分组成:耦合设施锁列表(称为修改后的资源列表 )和耦合设施锁哈希表(称为锁表 )。 修改后的资源列表记录了保护已更改数据的锁,从而在发生故障时保护数据。 锁定表包含锁定状态信息和锁定成员,用于提供全局锁定序列化。
- 列表结构(SCA)
- 列表结构包含 Db2 共享通信区 (SCA)。 每个成员都使用SCA将控制信息传递给组内的其他成员。 SCA包含所有数据库异常状态条件以及组恢复所需的其他信息。
- 缓存结构(Db2 组缓冲池)
- 高速缓存结构用作组缓冲池(GBP),为成员缓存共享数据页。 对于多个群组成员感兴趣的数据缓存,您有以下选项:
- 缓存所有数据(只读和已更新)
- 仅缓存更新的数据
- 仅缓存系统控制页面(特定于LOB表空间)
- 缓存无数据;仅将组缓冲池用于交叉验证
一个组缓冲池用于所有同名的成员缓冲池。 例如,每个成员必须有一个缓冲池0( BP0 ),其中包含目录和目录表空间。 数据共享组上的耦合设施必须存在一个组缓冲池0( GBP0 )。
同样,如果某个成员创建了表空间X并将其与缓冲池1( BP1 )关联,则X与每个成员的 BP1 关联,因为整个组的目录中只有X的一个定义。 要共享X中的数据,必须定义缓存结构,将缓冲池1( GBP1 )分组。 如果您没有定义组缓冲池,则单个成员可以更新X,也可以多个成员读取X,但X不能有Db2 读写活动。
建议 :对于每个成员私有的数据,例如只有一位成员读取的工作文件或用户数据,请将这些数据定义为非共享页面集的缓冲池。 例如,假设您希望将所有非共享页面集与缓冲池6( BP6 )关联。 如果您只希望成员 DB2A 访问非共享表空间 Y,请将 Y(和任何索引)定义为 BP6。 将 BP6 的大小定义为0(零),则无需定义组缓冲池6的耦合设施结构。 通过将私有数据移动到与共享数据使用的缓冲池分开的缓冲池中,您可以更轻松地监控私有数据,并提高其性能的可预测性。
组缓冲池的交叉失效
组缓冲池使用交叉失效机制来保持组成员缓冲池中的数据一致性。 共享数据页在每个缓存结构的组缓冲池目录中注册,从而使耦合设施控制程序能够交叉使各个成员缓冲池中保存的数据页副本失效。 当成员的缓冲池中不包含最新版本的数据时,就会发生交叉失效。 在这种情况下,如果成员需要再次引用页面,则必须从组缓冲池或磁盘上重新读取页面。

组缓冲池异步交叉验证
Db2 可以在耦合设施写入请求完成之前异步执行交叉验证。 此功能要求满足以下条件:
- 操作系统为 z/OS 2.2 或更高版本,并应用了 z/OS APAR OA54688。
- 耦合设施控制代码(CFCC)级别(CFLEVEL)为23或更高。
异步交叉验证可能发生在延迟写入或强制提交写入时,以及至少一个内部定义的页面集的页面数被同时写入组缓冲池时。 如果数据页大小为 32KB ,则不会出现异步交叉验证。
通过异步交叉验证,交易无需等到验证过程完成。 尽管成员相距甚远的数据共享组可以通过异步交叉验证获得更显著的性能提升,但成员距离较近的数据共享组也能从中受益。 性能提升可以从会计学2级通过时间中看出。
