插入算法2
插入算法2( IAG2 )可以提高INSERT语句的吞吐量,减少日志记录,并在特定条件下减少2类耗时和2类CPU时间。
从 IAG2 中受益最大的工作负载类型包括传统事务性工作负载(将数百万行数据同时插入到一个或多个 Db2® 表中)以及涉及数百万个数据点的新类型工作负载(例如,物联网( IoT )应用,如与天气相关的应用,它们同时从不同地点收集大量数据)。 由多个批处理作业组成的工作负载,如果针对同一组表同时插入数据,性能提升将最为显著。
- 能够快速插入大量数据,以便通过临时查询立即使用这些数据
- 消除数据页面争用,即当多个代理被分配到同一位置插入行时,可能会发生争用
- 消除空间映射争用,通常当多个代理在表或分区末尾插入时会发生这种情况
IAG2 通过预先分配数据页,减少大量数据插入时的工作负载空间争用。 IAG2 在内存中名为插入算法2页管的区域中,累积有足够空间插入新行的数据页的页码。 Db2 根据需要为页面管道添加新的页码。 当需要插入一行时, Db2 会从页管中选择一个页码,确保为新行留出足够的空间。
IAG2 何时使用?
IAG2 可通过指定CREATE TABLESPACE或ALTER TABLESPACE语句中的INSERT ALGORITHM 2子句,为特定表空间启用该功能。 DEFAULT_INSERT_ALGORITHM子系统参数用于在子系统级别控制启用 IAG2。
IAG2 仅用于使用“成员集群”选项的通用表格空间。 在非通用表空间和未使用“成员集群”选项的通用表空间上插入操作使用插入算法1( IAG1 )。 IAG2 还支持使用成员集群的通用表空间的LOAD SHRLEVEL CHANGE。
在某些情况下,即使明确设置了 IAG2 ,且所有必要条件均已满足,它也不会被使用。 例如,如果一个表或表空间被锁定或发生锁定升级,则不使用 IAG2 ,应用程序将返回使用 IAG1。
当 IAG2 失效,插入操作恢复使用 IAG1 时,将发送消息 DSNI055I。 该消息及其伴随的原因代码提供了导致INSERT语句回退到使用 IAG1 的详细情况。
性能提升效果最佳的用例
虽然 IAG2 可以提高并发大量插入的性能,但有些情况比其他情况更有优势。
例如,当大量工作同时向同一张表或同一组表插入数据时,性能优势最为明显。 由于每个线程都预先分配了不同的数据页用于插入数据,因此消除了与数据页和空间映射争用相关的延迟。
然而,当少量批处理作业连续插入多行时, IAG2 的性能优势并不明显。 在这种情况下,一行一行地插入,这意味着表格空间中的可用空间一次只能被一行占用。 由于不存在空间争用,预先分配数据页的作用不大。
- 要确定您的工作负载性能是否可以通过 IAG2 得到提升,请评估会计报告中的第3类暂停。 如果您发现数据页或空间地图页的页面锁定争用或全局争用导致等待时间过长,那么 IAG2 可能会缓解这些延迟。
- 在大多数情况下,使用 IAG2 不会显著增加空间使用量。 然而,当您使用 IAG2 处理插入操作量不大的表时,由于预计 Db2 插入操作量会很大,空间使用量可能会增加。 因为 IAG2 仅用于使用MEMBER CLUSTER选项定义的表空间,请评估INSERT活动量低的表是否需要此选项。 取消此选项将强制使用 IAG1 ,从而避免空间使用量增加。 或者,如果需要使用成员集群选项,请发出ALTER TABLESPACE语句,并将INSERT ALGORITHM选项更改为1,以避免空间增加。
影响刀片性能的因素
虽然 IAG2 在最佳条件下消除了数据页和空间映射争用,但索引争用和日志写入等待等其他因素也会对并发插入的性能产生负面影响。 IAG2 对这些问题没有缓解作用。
此外,插入性能可能会受到网络瓶颈、缓冲池、耦合设施和 Db2 日志等一般性能问题的影响。

如果 IAG2 失效了怎么办?
如果 IAG2 失效, Db2 会发送消息 DSNI055I ,并附上返回代码,说明失败原因。 如果故障是由临时情况引起的,例如锁升级或页面管道存储问题,或者空间不足,可能需要人工干预, Db2 会自动尝试在预设的时间间隔内重新启用 IAG2 ,同时等待故障情况得到解决。 在首次尝试重新启用 IAG2 后75秒,系统再次出现故障。 后续尝试将每隔一段时间进行一次,直到每小时一次。
如果由于必须手动纠正的情况(例如达到最大空间量)导致 IAG2 失效,则 Db2 可能不会自动尝试重新启用 IAG2。 检查底层服务信息,确定故障原因。 在这种情况下,在添加空格后, IAG2 将在首次插入时重新启用。
当 IAG2 在没有人工干预的情况下自动成功重新启用时,系统会发送邮件 DSNI087I。 对于需要增加空间的情况,不一定需要发送 DSNI087I。
