提高数据共享环境的并发性

您可以应用某些建议来减少锁争用,提高数据共享环境的并发性。

准备工作

在应用这些特定的数据共享建议之前,请确保您已应用了用于提高并发性的基本建议。 有关基本建议的信息,请参阅 《提高并发性 》。

关于本任务

锁定请求和组缓冲池请求是数据共享性能的最关键因素。 为了减少数据共享环境中的锁定争用,您可以采用相同的方法来提高数据共享之外的并发性。 下面将重复一些一般性建议,并加以强调,因为在数据共享环境中,避免锁定更为重要。

过程

您可以使用以下任意一种方法来提高数据共享环境中的并发性:

  • 创建表格空间时,请指定TRACKMOD NO和MEMBER CLUSTER选项。
    这些选项可以在大量插入依赖于 GBP 的表空间时减少空间映射页上的 p 锁和页面锁争用。 当表空间使用增量图像副本时,TRACKMOD NO 无法使用。
  • 当使用成员集群选项时,对于插入密集型工作负载,请考虑使用锁定大小行。
    行级锁定可能会通过以下方式提供额外的缓解:
    • 减少数据页上的页面P锁和页面锁存器争用
    • 空间利用更合理
    • 缓冲池中工作页面的数量减少

    但是,对于频繁在表空间末尾插入数据的插入密集型工作负载,请勿在没有成员集群选项的情况下使用锁定大小行。 这样做可能会导致数据页和空间映射页上的页面p锁争用过多,以及额外的锁定协议占用页面p锁。

  • 将LOCKSIZE ANY或PAGE作为默认设计。 仅在应用程序遇到严重的锁定争用(包括死锁和超时)时,才考虑锁定大小行。

    LOCKSIZE ANY是CREATE TABLESPACE的默认值。 它允许 Db2 选择锁的大小, Db2 通常为非LOB/非XML表空间选择LOCKSIZE PAGE和LOCKMAX SYSTEM。 对于LOB表空间, Db2 选择LOCKSIZE LOB和LOCKMAX SYSTEM。 同样,对于XML表空间, Db2 选择LOCKSIZE XML和LOCKMAX SYSTEM。

    页面级锁定通常会减少对顺序访问和操作的数据锁定和解锁请求,从而降低CPU成本。 页面级锁定也更有可能导致在同一数据页面中按顺序插入行。 在数据共享环境中,使用 MAXROWS=1 进行行级锁定可能会遇到数据页p锁的问题。 然而,当 MAXROWS=1 时,页面级锁定可以避免数据页面p-lock。

    行级锁定提供了更好的并发性,因为锁的粒度更细。 然而,页面级和行级锁定的每次锁定和解锁请求的成本大致相同。 因此,行级锁定可能会增加CPU成本。 行级锁定也可能导致更多的数据页面锁存器争用。 在行级锁定下,通过并发线程顺序插入的行不太可能位于同一数据页中。

  • 对于频繁提交点重复访问同一表空间的应用程序,使用“释放(取消分配)”绑定选项可以避免反复释放和重新获取锁的成本。
    对于成员内并发活动不多的对象,此选项可避免重复释放和重新获取同一父锁的成本。 您还可以减少使用线程的交易中的虚假争用。
  • 对于使用频率较低的方案或套餐,请使用“发布(提交)”绑定选项,以避免EDM池存储、锁定存储和线程相关存储过度增加。
  • 请考虑使用随机索引键列。
    在数据共享环境中,您可以使用随机索引键列来减少锁定争用,但代价是CPU使用率增加,因为锁定和getpage操作增加,索引页的读写I/O也增加。

    这种技术可以有效减少某些类型相等谓词的争用。 例如,如果您在时间戳列上创建索引,而时间戳总是被当前时间填充,那么索引上的每次插入都会成为最大值,并导致最后一个索引叶页上的争用。 在连续值的列上(如发票号码)的索引也会导致类似的争用,特别是在交易工作量大的环境中。 在每种情况下,使用随机索引顺序都会导致值存储在索引树中的随机位置,并减少连续插入命中同一索引叶页并导致争用的情况。

    虽然随机索引可以缓解类似或连续值集的争用问题,但对于相同值却无济于事。 相同的值编码相同,并且每个值都插入索引树上的相同位置。